Невозможно запросить внешнюю таблицу BigQuery для многораздельных данных с помощью spark - PullRequest
0 голосов
/ 03 мая 2020

Я пытался создать внешнюю таблицу для секционированных данных в GCS, записанных из задания спарка, с датой, секционированной в формате PARQUET.

Данные представляют собой корзину GCS, как показано на рисунке.

enter image description here

Я создал внешнюю таблицу с определением таблицы

  "hivePartitioningOptions": {
    "mode": "AUTO",
    "sourceUriPrefix": "gs://transaction_data_bucket_for_bigquery/trx_data"
  },
  "sourceFormat": "PARQUET",
  "sourceUris": [
    "gs://transaction_data_bucket_for_bigquery/trx_data/*"
  ]
}

с помощью команды

bq mk --external_table_definition=/tmp/table_def <project>:<dataset>.sample_trx_external

Когда я пытаюсь запросить таблицу, я получаю странную ошибку.

Partition keys should be invariant from table creation across all partitions, with the number of partition keys held constant with invariant names. Expected 0 partition keys ([]), but 1 ([transaction_date]) were encountered along path /bigstore/transaction_data_bucket_for_bigquery/trx_data/transaction_date=2016-01-01.; Cannot add hive partitioning to table <data_set>.sample_trx_external -- table creation from underlying uri failed.. Underlying error: Partition keys should be invariant from table creation across all partitions, with the number of partition keys held constant with invariant names. Expected 0 partition keys ([]), but 1 ([transaction_date]) were encountered along path /bigstore/transaction_data_bucket_for_bigquery/trx_data/transaction_date=2016-01-01..

К сожалению, я не смог расшифровать сообщение. В корзину GCS записывается только 1 день транзакций.

Когда я попробовал с определением режима CUSTOM

{
  "hivePartitioningOptions": {
    "mode": "CUSTOM",
    "sourceUriPrefix": "gs://transaction_data_bucket_for_bigquery/trx_data/{transaction_date:DATE}"
  },
  "sourceFormat": "PARQUET",
  "sourceUris": [
    "gs://transaction_data_bucket_for_bigquery/trx_data/*"
  ]
}

я получил немного другую ошибку

Partition keys should be invariant from table creation across all partitions, with the number of partition keys held constant with invariant names. Expected 1 partition keys ([transaction_date]), but 0 ([) were encountered along path /bigstore/transaction_data_bucket_for_bigquery/trx_data.; Cannot add hive partitioning to table <data_Set>.sample_trx_external_2 -- table creation from underlying uri failed.. Underlying error: Partition keys should be invariant from table creation across all partitions, with the number of partition keys held constant with invariant names. Expected 1 partition keys ([transaction_date]), but 0 ([) were encountered along path /bigstore/transaction_data_bucket_for_bigquery/trx_data..

Попал сюда, и любое предложение было бы большим подспорьем.

1 Ответ

1 голос
/ 05 мая 2020

Как показано на прилагаемом изображении в вопросе, есть файл _SUCCESS, который был написан заданием spark, который создал разделенный набор данных. Проблема здесь в пути "gs: //action_data_bucket_for_bigquery / trx_data /" во внешней таблице больших запросов, где каждый каталог или файл ожидает в виде секционированного формата. Определенно _SUCCESS не следует этой структуре, что привело к появлению сообщения об ошибке выше.

Исправлено: я просто удалил файл, и все работает как положено.

...