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

时间:2019-06-18 14:43:34

标签: apache-spark google-bigquery avro

我正在从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中读取二进制数据?

1 个答案:

答案 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

  

如果在bq导出期间不可能,我是否只能选择   读取spark中的二进制数据?

BigQuery中的

Numeric types是16个字节,可以将它们作为十进制来使用。您可以尝试将其强制转换为decimal