Использование внешних паркетных столов в конвейере 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 при подключении к блокам данных
Я понимаю, что это не совсем поможет с легким dbt-external-tables
вариант использования, но похоже, что разработка для поддержки стека azure databricks / datalake все еще продолжается.
Попробую разобраться в этом чуть позже, потому что это вариант использования, который имеет отношение и ко мне.