我有一个简单的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
相媲美。