簡體   English   中英

BigQuery 無法將“null”解析為字段的 int

[英]BigQuery Could not parse 'null' as int for field

試圖將 csv 文件加載到 bigquery 表中。 有些列的類型為 INTEGER,但某些缺失值為 NULL。 所以當我使用命令bq load加載時,出現了如下錯誤:

無法將“null”解析為字段的 int

所以我想知道處理這個問題的最佳解決方案是什么,必須先重新處理數據才能加載 bq?

您需要轉換數據以最終獲得預期的架構和數據。 將列指定為具有類型 STRING,而不是 INTEGER。 將 CSV 文件加載到您不打算長期使用的表中,例如 YourTempTable。 在 BigQuery UI 中,點擊“顯示選項”,然后選擇具有所需表名的目標表。 現在運行查詢:

#standardSQL
SELECT * REPLACE(SAFE_CAST(x AS INT64) AS x)
FROM YourTempTable;

這會將字符串值轉換為整數,其中'null'被視為null

請嘗試作業配置設置。

job_config.null_marker = 'NULL'

配置.load.nullMarker
細繩
[可選] 指定表示 CSV 文件中空值的字符串。 例如,如果您指定“\N”,BigQuery 在加載 CSV 文件時會將“\N”解釋為空值。 默認值為空字符串。 如果您將此屬性設置為自定義值,則當除 STRING 和 BYTE 之外的所有數據類型都存在空字符串時,BigQuery 會拋出錯誤。 對於 STRING 和 BYTE 列,BigQuery 將空字符串解釋為空值。

https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load

BigQuery 控制台有其局限性,不允許您在從 CSV 加載數據時指定空標記。 但是,可以使用 BigQuery 命令行工具的bq load命令輕松完成。 我們可以使用--null_marker標志來指定在這種情況下簡單為null的標記。

bq load --source_format=CSV \
    --null_marker=null \
    --skip_leading_rows=1 \
    dataset.table_name \
    ./data.csv \
    ./schema.json

將 null_marker 設置為 null 就可以解決這個問題。 如果表中已經存在有效模式,則可以省略schema.json部分。 使用--skip_leading_rows=1是因為我的第一行是標題。 您可以在 BigQuery 文檔中了解有關bg load 命令的更多信息。

但是,load 命令可以讓您一次創建和加載一個表。 需要在以下格式的 JSON 文件中指定架構:

[
 {
   "description": "[DESCRIPTION]",
   "name": "[NAME]",
   "type": "[TYPE]",
   "mode": "[MODE]"
 },
 {
   "description": "[DESCRIPTION]",
   "name": "[NAME]",
   "type": "[TYPE]",
   "mode": "[MODE]"
 }
]

暫無
暫無

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

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