我正在从BigQuery表中导出数据,该表具有名为prop12的列定义为NUMERIC数据类型。请注意,目标格式为AVRO,无法更改。
bq extract --destination_format AVRO datasetName.myTableName /path/to/file-1-*.avro
当我读取Avro数据时,使用Spark无法将NUMERIC数据类型转换为Integer。
--prop12: binary (nullable = true)
cannot resolve 'CAST(`prop12` AS INT)' due to data type mismatch: cannot cast BinaryType to IntegerType
有什么方法可以指定prop12在进行bq提取时应导出为Integer吗?
OR
如果在bq导出期间无法执行操作,我是否只能选择在spark中读取二进制数据?
答案 0 :(得分:0)
有什么方法可以指定prop12应该导出为Integer吗? 在进行bq提取时?
在提取命令中,您无法执行此操作。您可以创建一个新的临时表,然后将其提取:
bq query --nouse_legacy_sql '
CREATE TABLE `my_dataset.my_temp_table`
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 10 MINUTE)
) AS
SELECT * REPLACE (CAST(prop12 AS INT64) AS prop12)
FROM `my_dataset.my_table`;
' && bq extract --destination_format AVRO my_dataset.my_temp_table /path/to/file-1-*.avro
考虑到这将生成additional cost。
BigQuery中的如果在bq导出期间不可能,我是否只能选择 读取spark中的二进制数据?
Numeric types是16个字节,可以将它们作为十进制来使用。您可以尝试将其强制转换为decimal。