我正在使用 Java 和 SQL 將數據移動到新表中。我想要:從 BigQuery 中的舊表中提取數據更新/修改多個條目將其推送到 BigQuery 中的另一個現有表不幸的是,一些舊數據遵循不同的模式。一些舊表可能有從一到幾百個缺失的列(字段)。我沒有任何可靠的方法來生成或填充這些缺失的數據,所以我決定將其保留為空。如何添加具有默認空值的列?目前,我正在使用 SQL QueryJobConfiguration 來拉取、更新和推送數據到 BQ:QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(
"SELECT PARSE_TIMESTAMP('%b %d %T %Y', CONCAT(time, ' 2018')) MyTimestamp, * EXCEPT(time)"
+ "FROM `myProject:MyDataset.MyTable` ")
.setUseLegacySql(false)
.setWriteDisposition(WriteDisposition.WRITE_APPEND)
.setDestinationTable(TableId.of(MyOtherDataset, MyOtherTable))
.build();當我嘗試運行它時,BigQuery 會拋出一個異常,聲稱數據缺少一列:線程“主”com.google.cloud.bigquery.BigQueryException 中的異常:架構更新無效。新架構中缺少字段 OtherField
1 回答

阿晨1998
TA貢獻2037條經驗 獲得超6個贊
經過一堆測試,我發現 BQ 不允許我推送,因為我有幾個字段設置為“REQUIRED”而不是“NULLABLE”。我完全忘記了他們。幸運的是,BigQuery 有一個實驗方法:setSchemaUpdateOptions。您可以像這樣實現它:
List<SchemaUpdateOption> SchemaUpdate = Arrays.asList(JobInfo.SchemaUpdateOption.ALLOW_FIELD_RELAXATION); .setSchemaUpdateOptions(SchemaUpdate)
ALLOW_FIELD_RELAXATION 本質上允許您在任何字段上用 NULLABLE 臨時替換 REQUIRED 模式。
添加回答
舉報
0/150
提交
取消