在 dbt 外部表旁加载期间从 gcp 存储中检索"filename"?



我有一个简单的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/模块正在寻找匹配表上的列数与文件中的列数,因为我能够"创建"当我在bigquery中查询表时,会得到各种各样的错误。

更新:从我在这里看到的-元数据"我在上面看到并尝试使用的表达是snowflake specific。源链接。

据我所知,所有指向云存储数据的BigQuery外部表都有一个额外的伪列_FILE_NAME(docs)。不需要在外部表定义中包含它,只需在下游查询:

select *,
_file_name as filename
from {{ source('my_schema', 'my_table_raw') }}

伪列方法可与Snowflake的metadata$filename和Redshift的$path相媲美。

最新更新