BigQuery с подключением BigTable, не может выполнить любой запрос

9

Я хочу создать несколько отчетов на основе данных в BigTable. Для этого я хотел создать запрос, который получит самые последние данные из BigTable и передаст их в отчет студии данных. Теперь проблема в том, что когда я создаю соединение BigTable в BigQuery, я не могу выполнить ни один запрос, даже для пустой таблицы. Я создаю тип для BigQuery следующим образом:

bq mk \
--external_table_definition=gs://somebucket/big-table-definition.json \
datareportingdataset.datareportingtable

и команда выполняется успешно. Мой big-table-definition.jsonвыглядит следующим образом:

{
    "sourceFormat": "BIGTABLE",
    "sourceUris": [
        "https://googleapis.com/bigtable/projects/playground-2/instances/data-reporting/tables/data-reporting-table"
    ],
    "bigtableOptions": {
        "readRowkeyAsString": "true",
        "columnFamilies" : [
            {
                "familyId": "cf1",
                "onlyReadLatest": "true",
                "columns": [
                    {
                        "qualifierString": "temp",
                        "type": "STRING"
                    },
                    {
                    //the rest of the columns
                ]
            }
        ]
    }
}

Ошибка при выполнении простого select *запроса выглядит следующим образом:

Error while reading table: datareportingdataset.datareportingtable, error message: Error detected while parsing row starting at position: 2. Error: Data between close double quote (") and field separator.

Сначала я заподозрил некоторые данные в BigTable, но когда я все удалил, ошибка все равно возникает. Я обнаружил, что это должно быть что-то с самим файлом json, поскольку, когда я перемещаю «исходные форматы» вниз на несколько строк, сообщается об изменении положения ошибки. Что я здесь не так делаю?

Kris
источник

Ответы:

1

только что воспроизвел ваш случай и обнаружил точно такую ​​же ошибку. Мне кажется, что когда вы запускаете команду bq mk, она вообще не извлекает никаких данных.

В качестве обходного пути я бы предложил вам запустить задание Dataflow для извлечения ваших данных в облачное хранилище в виде файла .avro, а затем импортировать ваши данные в набор данных в Bigquery.

Chris32
источник
Я не верю, что Bigtable avro-файлы можно импортировать в BigQuery (даже если он принимает avro-файлы)
Билли Джейкобсон,
1

Я думаю, что я нашел проблему, поскольку я был в состоянии воспроизвести это. Сообщение об ошибке сбивает с толку, но, как описано здесь :

Вы должны создать файл схемы JSON вручную, и он должен находиться на вашем локальном компьютере. Ссылка на файл схемы JSON, хранящийся в облачном хранилище или на Google Диске, не поддерживается.

Я провел несколько тестов с помощью быстрого запуска Bigtable, и он хорошо сработал для меня:

bq query "SELECT * FROM DATASET.datareportingtable"
Waiting on JOB_ID ... (3s) Current status: DONE   
+--------+-----------------+---------------------------+-----------------------+
| rowkey | cf1_column_name | cf1_column_cell_timestamp | cf1_column_cell_value |
+--------+-----------------+---------------------------+-----------------------+
| r1     | c1              |       2019-10-15 18:15:04 | test-value            |
+--------+-----------------+---------------------------+-----------------------+

Единственное, что я сделал по-другому, - это использование локального пути, как в:

--external_table_definition=big-table-definition.json

Изменив это обратно на:

--external_table_definition=gs://$BUCKET/big-table-definition.json

И я получил ту же ошибку:

bq query "SELECT * FROM DATASET.datareportingtable2"
Waiting on JOB_ID ... (0s) Current status: DONE   
BigQuery error in query operation: Error processing job 'PROJECT:JOB_ID': Error while reading table: DATASET.datareportingtable2, error message: Error detected while parsing row starting at
position: 2. Error: Data between close double quote (") and field separator.
Гиллем Ксеркэвинс
источник
Интересно, у меня нет времени, чтобы проверить это сейчас, но спасибо за усилия
Крис