在 dbt-external-tables sideload 期间从 gcp 存储中检索 "filename"?
Retrieve "filename" from gcp storage during dbt-external-tables sideload?
我有一个简单的 9 列报告,我正在通过 dbt-external-tables 模块侧载到 bigquery。
version: 2
sources:
- name: my_schema
database: my_project
loader: gcloud storage
tables:
- name: my_table_raw
description: "external table of reports"
external:
location: 'gs://my_bucket/my_reports/*'
auto_refresh: false
options:
format: csv
skip_leading_rows: 1
到目前为止,此设置的一切都很好,数据导入正确,可查询等。
我的简单补充:将文件名追加为一列最简单的方法是什么?
我尝试了一些效果:
- name: file_name_column
expression: metadata$filename
data_type: string
description: "the source file name from within gcp"
但看起来 bigquery/模块正在寻找匹配 table 上的列数与文件中的列数,因为我能够“创建”table在 bigquery 中,但是当我查询它时遇到各种错误。
更新:从我在这里看到的情况来看——我在上面看到并尝试使用的“元数据”表达式是特定于雪花的。 Source link.
据我了解,所有指向 Cloud Storage 数据的 BigQuery 外部 tables 都有一个额外的伪列 _FILE_NAME
(docs)。无需将其包含在外部 table 定义中,您只需在下游查询即可:
select *,
_file_name as filename
from {{ source('my_schema', 'my_table_raw') }}
伪列方法可与 Snowflake 的 metadata$filename
和 Redshift 的 $path
相媲美。
我有一个简单的 9 列报告,我正在通过 dbt-external-tables 模块侧载到 bigquery。
version: 2
sources:
- name: my_schema
database: my_project
loader: gcloud storage
tables:
- name: my_table_raw
description: "external table of reports"
external:
location: 'gs://my_bucket/my_reports/*'
auto_refresh: false
options:
format: csv
skip_leading_rows: 1
到目前为止,此设置的一切都很好,数据导入正确,可查询等。
我的简单补充:将文件名追加为一列最简单的方法是什么?
我尝试了一些效果:
- name: file_name_column
expression: metadata$filename
data_type: string
description: "the source file name from within gcp"
但看起来 bigquery/模块正在寻找匹配 table 上的列数与文件中的列数,因为我能够“创建”table在 bigquery 中,但是当我查询它时遇到各种错误。
更新:从我在这里看到的情况来看——我在上面看到并尝试使用的“元数据”表达式是特定于雪花的。 Source link.
据我了解,所有指向 Cloud Storage 数据的 BigQuery 外部 tables 都有一个额外的伪列 _FILE_NAME
(docs)。无需将其包含在外部 table 定义中,您只需在下游查询即可:
select *,
_file_name as filename
from {{ source('my_schema', 'my_table_raw') }}
伪列方法可与 Snowflake 的 metadata$filename
和 Redshift 的 $path
相媲美。