BigQuery 在 AVRO 中将 NUMERIC 数据类型导出为二进制数据类型



我正在从 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 个字节,可以将它们作为十进制使用。您可以尝试将它们转换为十进制。

最新更新