在dbt管道中使用外部Parquet表

knsnq2tg  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(514)

我正在尝试建立一个简单的dbt管道,它使用一个存储在azure数据湖存储上的Parquet表,并创建另一个也将存储在同一位置的表。
在我的下面 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 .
或者我可以用Hive元存储来代替?任何关于如何解决这个问题的建议都将不胜感激!

ipakzgxi

ipakzgxi1#

这可能还不可用。看起来它仍然是一个开放的问题,到目前为止还没有开发工作。
相关问题 dbt-external-tables 包回购:支持spark外部表
您有来自的依赖项吗 dbt-spark 安装?
以下是一些相关问题:
spark\连接\u url在连接到databricks时不包含工作区\u id
支持delta lake格式
我意识到这些对简单的事情并没有帮助 dbt-external-tables 用例,但看起来仍在进行开发以支持azuredatabricks/datalake堆栈。
稍后再深入研究一下,因为这是一个与我相关的用例。

m2xkgtsf

m2xkgtsf2#

我帮助维护两个 dbt-spark 插件和 dbt-external-tables 包裹。我可以确认,它们的互操作性还处于初步阶段,我非常欢迎为改进互操作性做出贡献。我不认为这是一个很大的提升,尽管其中一个挑战是spark/databricks支持两个不同的 create external table 语法(如该期所述)。
我知道你说的 path/to/storage 作为源的外部位置和 location_root 您的配置 orders 模型。前者是读取数据的地方,后者是将模型具体化为表的地方。我不知道你的意思是表示相同的占位符还是不同的占位符。
edit: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`

相关问题