(Версии dbt: v2.0 и новее)

# Подключение Apache Spark к dbt v2 [Бета-версия](https://docs.getdbt.tech/docs/dbt-versions/product-lifecycles "Подробнее о статусе или тарифе")

Локальная разработка

dbt v2 поддерживает Apache Spark, ускоряя компиляцию и выполнение ваших проектов dbt на базе Spark. В настоящее время dbt v2 поддерживает только Apache Spark 3.0.

## dbt v2 и Spark

При работе со Spark dbt v2 использует диалект Databricks SQL для [статического анализа](https://docs.getdbt.tech/docs/build/about-static-analysis.md#principles-of-static-analysis). Databricks SQL — это надмножество Spark SQL, поэтому ваш SQL проверяется в соответствии с семантикой Databricks. Это обеспечивает всестороннюю проверку ошибок и функции анализа SQL. В одном из будущих выпусков планируется добавить отдельный диалект Spark SQL для статического анализа.

## Аутентификация

Адаптер Spark в dbt v2 поддерживает:

* Thrift

  * Механизм PLAIN протокола Simple Authentication and Security Layer (SASL)
  * Без SASL (NOSASL)

* Livy

  * Базовую аутентификацию (имя пользователя и пароль)
  * При развертывании в Amazon Web Services (AWS): AWS Signature Version 4
    * Поддерживается аутентификация с использованием единого входа, служебных учетных записей или пользовательских токенов

## Настройка dbt v2

Настройте подключение к Spark в `profiles.yml`:

\~/.dbt/profiles.yml

```yaml
your_profile_name:
  target: dev
  outputs:
    dev:
      type: spark
      method: CONNECTION_METHOD # thrift, http, or livy
      port: PORT_NUMBER
      auth: AUTH_METHOD
      schema: SCHEMA_NAME
      host: HOSTNAME
      platform_hint: PLATFORM_HINT # optional; aws_emr_serverless or aws_emr_eks
      server_side_parameters: # optional; required keys depend on platform_hint
        livy.server.session.ttl: SESSION_TTL_SECONDS # optional when using method: livy
```

| Поле профиля             | Обязательное | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Пример                                     |
| ------------------------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------ |
| `method`                 | Да           | Метод подключения. Допустимые значения: `thrift`, `http` или `livy`.                                                                                                                                                                                                                                                                                                                                                                                         | `thrift`                                   |
| `port`                   | Да           | Номер порта для подключения.                                                                                                                                                                                                                                                                                                                                                                                                                                 | `443`                                      |
| `auth`                   | Да           | Метод аутентификации.                                                                                                                                                                                                                                                                                                                                                                                                                                        | `SASL PLAIN`, `NOSASL`, `AWS_SIGV4`        |
| `schema`                 | Да           | Имя базы данных или схемы, в которой dbt будет создавать объекты и выполнять запросы к ним.                                                                                                                                                                                                                                                                                                                                                                  | `analytics`                                |
| `host`                   | Да           | Имя хоста кластера Spark или рабочей области Databricks.                                                                                                                                                                                                                                                                                                                                                                                                     | `yourorg.sparkhost.com`                    |
| `platform_hint`          | Нет          | Указывает dbt v2, какую платформу Spark вы используете. dbt v2 использует это значение для проверки обязательных параметров в `server_side_parameters`. Допустимые значения: `aws_emr_serverless`, `aws_emr_eks`. Если параметр не указан, dbt v2 предполагает, что используется обычный кластер Spark.                                                                                                                                                      | `aws_emr_serverless`                       |
| `server_side_parameters` | Нет          | Параметры сеанса Spark, передаваемые кластеру.<br /><br />Обязательные ключи при использовании `platform_hint`:<br />- Для `aws_emr_serverless` используйте `emr-serverless.session.executionRoleArn`.<br />- Для `aws_emr_eks` используйте `spark.kubernetes.namespace`.<br /><br />При использовании `method: livy` можно задать `livy.server.session.ttl`, чтобы настроить время, в течение которого сеанс может оставаться неактивным до его завершения. | См. [примеры профилей](#example-profiles). |

### Примеры профилей

### Thrift (бинарный)

\~/.dbt/profiles.yml

```yaml
spark-local-thrift-binary:
  target: spark
  outputs:
    spark:
      type: spark
      method: thrift
      port: 10000
      auth: NOSASL
      host: localhost
      schema: my_schema
```

### Thrift (HTTP)

\~/.dbt/profiles.yml

```yaml
spark-local-thrift-http:
  target: spark
  outputs:
    spark:
      type: spark
      method: http
      port: 443
      auth: NOSASL
      # Omit the protocol scheme to use HTTPS. For HTTP, use a host like http://localhost
      host: localhost
      schema: my_schema
```

### AWS EMR Serverless

\~/.dbt/profiles.yml

```yaml
spark-emr-serverless:
  target: spark
  outputs:
    spark:
      type: spark
      method: livy
      auth: AWS_SIGV4
      port: 443
      host: "YOUR_APPLICATION_ID.livy.emr-serverless-services.us-east-1.amazonaws.com"
      schema: my_schema
      platform_hint: aws_emr_serverless
      server_side_parameters:
        "spark.driver.memory": "1g"
        "spark.driver.cores": 1
        "spark.executor.memory": "1g"
        "spark.executor.cores": 1
        # Required by EMR Serverless when using platform_hint: aws_emr_serverless
        "emr-serverless.session.executionRoleArn": "arn:aws:iam::YOUR_AWS_ACCOUNT:role/YOUR_ROLE"
```

### AWS EMR в EKS

\~/.dbt/profiles.yml

```yaml
spark-emr-eks:
  target: spark
  outputs:
    spark:
      type: spark
      method: livy
      auth: AWS_SIGV4
      port: 443
      host: "https://my-spark-cluster.com"
      schema: my_schema
      platform_hint: aws_emr_eks
      server_side_parameters:
        # Required by EMR on EKS when using platform_hint: aws_emr_eks
        "spark.kubernetes.namespace": "emr-jobs"
        "spark.driver.memory": "1g"
        "spark.driver.cores": 1
        "spark.executor.memory": "8g"
        "spark.executor.cores": 4
```

Подробные сведения о параметрах конфигурации см. на странице [Настройка Spark](https://docs.getdbt.tech/reference/resource-configs/spark-configs.md).
