问题描述
我有一个简单的 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 中“创建”表,但是当我遇到各种错误时对其进行查询。
更新:从我在这里看到的 - 我在上面看到并尝试使用的“元数据”表达式是特定于雪花的。 Source link。
解决方法
据我所知,所有指向 Cloud Storage 数据的 BigQuery 外部表都有一个额外的伪列 _FILE_NAME
(docs)。无需将其包含在您的外部表定义中,您只需在下游查询即可:
select *,_file_name as filename
from {{ source('my_schema','my_table_raw') }}
伪列方法可与 Snowflake 的 metadata$filename
和 Redshift 的 $path
相媲美。