我已经成功地将大量外部hive分区数据(在parquets中)加载到bigquery中,没有问题。
我的所有表共享同一模式,并且位于同一数据集中。但是,当使用我定义的外部表定义文件调用bq-mk命令时,有些表无法工作。
bq-mk之后错误的完整输出如下
mk操作中的BigQuery错误:读取表my_example时出错,错误消息:无法将分区键my_common_key(类型:type_INT64)添加到架构,因为已存在同名的另一列。这是不允许的。完整分区架构:[my_common_key:TYPE_INT64,my_secondary_common_key:TEYPE_INT64]。
外部表定义文件如下所示
{ "hivePartitioningOptions": {
"mode": "AUTO",
"sourceUriPrefix": "gs://common_bucket/my_example" },
"parquetOptions": {
"enableListInference": false,
"enumAsString": false }, "sourceFormat": "PARQUET", "sourceUris": [
"gs://common_bucket/my_example/*" ]
您将看到,我依赖于对具有源URI模式的模式的自动推断,因为有许多Parquet文件嵌套在hive用作分区键的两个子目录中。完整路径是***gs://common_bucket/my_example/my_common_key=2022/my_secondary_common_key=1***
1条答案
按热度按时间xxhby3vn1#
请检查bucket下的数据文件,您的配置单元表是否已经发展,旧文件是否有您作为数据一部分使用的分区列,但稍后配置单元表是使用“my_common_key”进行分区的。我最近迁移了大量配置单元表,并遇到了类似的问题。当前的配置单元表结构和底层数据随着时间的推移而发展。
解决此问题的一种方法是使用dataproc hive读取数据并将其导出回GCS位置,然后尝试加载到BigQuery。您也可以尝试使用Spark SQL来实现这一点。