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, як коли я переміщу "sourceFormats" вниз по декількох рядках, про які повідомляється положення про помилку. Що я тут роблю неправильно?

Відповіді:


1

просто відтворив ваш випадок і виявив таку саму помилку. Мені це здається, коли ви запускаєте команду bq mk, вона взагалі не вилучає жодних даних.

В якості робочого опису я б запропонував вам запустити завдання Dataflow, щоб витягнути свої дані в Cloud Storage у вигляді файлу .avro, а потім імпортувати свої дані в набір даних у Bigquery.


Я не вірю, що файли avro Bigtable можна імпортувати до 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.

Цікаво, що я не маю часу перевірити це зараз, але дякую за старання
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.