Использование внешних паркетных столов в конвейере DBT

Я пытаюсь настроить простой конвейер DBT, который использует паркетные таблицы, хранящиеся в Azure Data Lake Storage, и создает другие таблицы, которые также будут храниться в том же месте.

Под моим models/ (который определяется как мой исходный путь) У меня 2 файла datalake.yml а также orders.sql. datalake.yml выглядит так:

version:2
sources:
   - name: datalake
     tables:
        - name: customers
          external:
             location: path/to/storage1 # I got this by from file properties in Azure
             file_format: parquet
          columns:
             - name: id
               data_type: int
               description: "ID"
             - name: ...

Мой orders.sql таблица выглядит так:

{{config(materialized='table', file_format='parquet', location_root='path/to/storage2')}}
select name, age from {{ source('datalake', 'customers') }}

Я также использую dbt-external-tablesпакет. Также обратите внимание, что когда я бегуdbt debug все в порядке, и я могу подключиться к своей базе данных (которая оказывается Databricks).

Я пробовал бежать dbt run-operation stage_external_sources который возвращается Error: staging external sources is not implemented for the default adapter. Когда я бегуdbt run, Я получил Error: UnresolvedRelation datalake.customers.

Или, может быть, я мог бы как-то использовать хранилище метаданных улья? Любые советы о том, как я могу это исправить, были бы очень признательны!

2 ответа

Решение

Я помогаю поддерживать как dbt-spark плагин и dbt-external-tablesпакет. Я могу подтвердить, что их совместимость все еще предварительные, и я решительно приветствую вклад в улучшение его. Я не думаю, что это большой успех, хотя одна из проблем заключается в том, что Spark/Databricks поддерживает два разныхcreate external tableсинтаксисы (как указано в этом выпуске).

FWIW Я вижу, что вы указали path/to/storageВ качестве внешнего местоположения источника иlocation_root конфиг вашего ordersмодель. Первое место для чтения данных из, а последнее место материализовать модель в виде таблицы. Я не был уверен, что вы имели в виду, что это один и тот же заполнитель или разные.

Изменить: TIL, который вы можете выбрать из некоторых типов файлов непосредственно в SparkSQL какselect * from filetype.filepath. Я считаю, что вы можете зарегистрировать такой источник, как:

version:2
sources:
 - name: datalake
   schema: parquet
   tables:
     - name: customers
       identifier: "path/to/storage1"
       quoting:
         identifier: true

Это означает, что у вас может быть шаблонный код вроде:

select * from {{ source('datalake', 'customers') }}

Что разрешит:

select * from parquet.`path/to/storage1`

Возможно, это еще не доступно. Похоже, это все еще нерешенная проблема, и разработчики пока не работали.

Связанная проблема для dbt-external-tablesрепозиторий пакетов: поддержка внешних таблиц Spark

Есть ли у вас зависимости от dbt-spark установлен?

Вот некоторые актуальные вопросы:

Spark_connection_url не содержат workspace_id при подключении к блокам данных

Поддержка формата Delta Lake

Я понимаю, что это не совсем поможет с легким dbt-external-tables вариант использования, но похоже, что разработка для поддержки стека azure databricks / datalake все еще продолжается.

Попробую разобраться в этом чуть позже, потому что это вариант использования, который имеет отношение и ко мне.

Другие вопросы по тегам