我正在从 BigQuery 表中导出数据,该表将名为 prop12 的列定义为 NUMERIC 数据类型。请注意,目的地格式为 AVRO,无法更改。
bq extract --destination_format AVRO datasetName.myTableName /path/to/file-1-*.avro
当我读取 avro 数据时,使用 spark 它无法将此数字数据类型转换为整数。
--prop12: binary (nullable = true)
cannot resolve 'CAST(`prop12` AS INT)' due to data type mismatch: cannot cast BinaryType to IntegerType
有什么方法可以指定在进行 bq 提取时将 prop12 导出为整数?
或
如果在 bq 导出期间无法实现,我是否只能选择在 Spark 中读取二进制数据?
有什么方法可以指定 prop12 应该导出为整数 在做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
考虑到这将产生额外的成本。
如果在 bq 导出期间无法实现,我是否只剩下 读取 Spark 中的二进制数据?
BigQuery 中的数字类型是 16 个字节,可以将它们作为十进制使用。您可以尝试将它们转换为十进制。