簡體   English   中英

如何使用 dbt 上傳包含換行符的 csv 數據

[英]How to upload csv data that contains newline with dbt

我有一個第 3 方生成的 CSV 文件,我希望使用dbt seed上傳到 Google BigQuery。

我設法將它手動上傳到 BigQuery,但我需要啟用默認關閉的“引用換行符”。

當我運行dbt seed時,我收到以下錯誤:

16:34:43  Runtime Error in seed clickup_task (data/clickup_task.csv)
16:34:43    Error while reading data, error message: CSV table references column position 31, but line starting at position:304 contains only 4 columns.

CSV 共有 32 列。 該文件包含帶有換行符的列值。 我猜這就是 dbt 解析器失敗的地方。 我檢查了dbt 種子配置選項,但沒有發現任何相關內容。

有任何想法嗎?

據我所知 - 種子功能受到 dbt-core 內置內容的限制。 所以種子不是我這里的 go 的方式。 您可以在 dbt-cre 問題 repo 上查看擴展種子選項 請求歷史(包括我自己對類似可選性的請求#3990 ),但我必須看到這方面的任何真正吸引力。


也就是說,對我來說效果很好的是將 gcp 項目中的平面文件存儲在 gcs 存儲桶中,然后利用dbt-external-tables package 進行非常相似但更健壯的文件結構。 我知道管理這可能會產生很多開銷,但如果您的種子文件繼續以可以利用分區的方式擴展,那么它變得非常值得。

更重要的是 - 正如 Jeremy 在 stackoverflow 上的回答中提到的,

dbt-external-tables package 支持傳遞 BigQuery 外部表的選項字典,該字典映射到此處記錄的選項

對於您的情況,應該是quoteallowQuotedNewlines選項。 如果您確實選擇使用dbt-external-tables您的 source.yml 將類似於:

gcs.yml

version: 2

sources:
  - name: clickup
    database: external_tables
    loader: gcloud storage
  
    tables:
      - name: task
        description: "External table of Snowplow events, stored as CSV files in Cloud Storage"
        external:
          location: 'gs://bucket/clickup/task/*'
          options:
            format: csv
            skip_leading_rows: 1
            quote: "\""
            allow_quoted_newlines: true

或者非常相似的東西。 如果您最終采用此路徑並將任務數據存儲在每日分區上,例如tasks_2022_04_16.csv - 您可以訪問該文件名和其他元數據,提供的偽列也由 Jeremy 在這里與我共享:

在 dbt-external-tables 側載期間從 gcp 存儲中檢索“文件名”?

我發現它是一套非常強大的工具,專門用於 BigQuery 的文件。

我正在嘗試使用 stage_external_sources 選項...我已經安裝了 package。 非常基本,我嘗試運行 dbt core install 附帶的示例模型,目的是創建一個外部 hive 表,並將數據存儲到 GCS 存儲桶中。

這是我的 package yml 文件的樣子。

在此處輸入圖像描述

當運行 dbt在此處輸入圖像描述

dbt run 命令成功運行,但數據未寫入 GCS 存儲桶。 對此的任何幫助將不勝感激。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM