微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 dbt-external-tables 旁加载期间从 gcp 存储中检索“文件名”?

如何解决在 dbt-external-tables 旁加载期间从 gcp 存储中检索“文件名”?

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。