我们目前有一个 DBT 实例位于 Google BigQuery 数据仓库之上。现在,我们最近被要求将 Google Sheets 中的一些数据合并到我们的建模中。
这样,DBT 是否可以直接与 Google Sheets 连接?即在 .yml 文件中将 Google Sheets 配置为直接外部数据源,或者让 DBT 运行某种 BigQuery 联合 SQL 语句?
有一个名为 dbt-external-tables 的 DBT 软件包(https://hub.getdbt.com/dbt-labs/dbt_external_tables/latest/),但它似乎仅适用于 Google Cloud Storage 存储桶中的 BigQuery + 文件。
但我在论坛和文档中看到的常见且最直接的选项是在 Google Sheet 之上的 BigQuery 上创建外部表。然后让 DBT 连接到外部 BigQuery 表。
只是想检查一下上述集成 DBT x Google Sheets x BigQuery 的常见选项实际上是否是唯一的选项,或者是否确实有一种方法可以让 DBT 在点击 BigQuery 之前直接连接到 Google Sheets?
谢谢
从我在
dbt-external-tables
一侧看到的情况来看,bigquery 适配器折叠为 create_external_table 宏的 DDL 语句。
不幸的是,我没有看到类似的 DDL 语句可用于 Google Sheets“外部”定义。如果我不得不猜测的话,看起来 UI 可能会通过
bq
cli 客户端执行某些操作,以从 Web 门户创建。
如果在本指南中添加了一个部分,其中包含基于Google Drive的外部源的DDL定义,那么这可能会成为前面提到的外部表的dbt宏中相对容易的构建。在此之前,您必须通过 UI、
bq
客户端或 REST api 来定义它。
如果您使用 BigQuery
,您可以使用
dbt_external_tables
将 Google 表格设置为源(编辑于 2023 年 8 月 10 日,基于 Databricks 用户的反馈)。上周才发现这一点。这是指定架构的示例。如果您省略了列,它应该能够自动检测,但它在我所做的工作表上对我不起作用。
2023-04-21 更新了更好的配置示例和命令。
这是一个显示配置模式和自动检测的配置,这两者都对我有用。
version: 2
sources:
- name: google_sheets
description: >
This source contains data stored in Google Sheets that are manually maintained.
project: my-project
dataset: stage_google_sheet
loader: external_table
tags:
- source
- google_sheet
tables:
- name: marketing_taxonomy
description: >
Marketing source channels, categories, etc.
external:
options:
format: GOOGLE_SHEETS
uris: ['https://docs.google.com/spreadsheets/d/[SHEET-ID]']
sheet_range: data
skip_leading_rows: 1
columns:
- name: source_raw
data_type: STRING
- name: source
data_type: STRING
- name: channel
data_type: STRING
- name: source_type
data_type: STRING
- name: source_category
data_type: STRING
- name: new_channel
data_type: STRING
- name: kpi_metrics_targets
description: >
KPI's maintained by FP&A
external:
options:
format: GOOGLE_SHEETS
uris: ['https://docs.google.com/spreadsheets/d/[SHEET-ID]']
sheet_range: 'Monthly Targets'
skip_leading_rows: 1
对于刚接触
dbt_external_tables
的人,您必须先运行以下命令才能引用源代码:
dbt run-operation stage_external_sources --args "select: google_sheets"
更新您的来源名称。就我而言,我还必须添加
--vars "ext_full_refresh: true"
选项。并非在所有情况下都需要这样做。