BigQuery com conexão BigTable, não pode executar nenhuma consulta

9

Quero gerar alguns relatórios com base nos dados do BigTable. Para isso, eu queria criar uma consulta que obtenha os dados mais recentes da BigTable e os repasse para o relatório do estúdio de dados. Agora, o problema é que, quando crio uma conexão BigTable no BigQuery, não consigo executar nenhuma consulta, mesmo na tabela vazia. Crio o tipo para o BigQuery da seguinte maneira:

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

e o comando é executado com sucesso. Minha big-table-definition.jsonaparência é a seguinte:

{
    "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
                ]
            }
        ]
    }
}

O erro ao fazer uma select *consulta simples é semelhante ao seguinte:

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.

Primeiro, suspeitava de alguns dados na BigTable, mas quando excluí tudo de lá, o erro ainda ocorre. Eu descobri que deve ser algo com o próprio arquivo json, como quando movo o "sourceFormats" algumas linhas, o erro altera a posição relatada. O que eu estou fazendo errado aqui?

Kris
fonte

Respostas:

1

acabou de reproduzir seu caso e encontrou exatamente o mesmo erro. Parece-me que quando você executa o comando bq mk, ele não extrai nenhum dado.

Como um workarroud, sugiro que você execute um trabalho do Dataflow para extrair seus dados para o Cloud Storage como um arquivo .avro e depois importe seus dados para um conjunto de dados no Bigquery.

Chris32
fonte
Eu não acredito que os arquivos Bigtable avro são capazes de ser importados para o BigQuery (apesar de ele aceita arquivos avro)
Billy Jacobson
1

Acho que encontrei o problema porque consegui reproduzi-lo. A mensagem de erro é confusa, mas, conforme documentado aqui :

Você deve criar o arquivo de esquema JSON manualmente e deve estar em sua máquina local. A referência a um arquivo de esquema JSON armazenado no Cloud Storage ou no Google Drive não é suportada.

Fiz alguns testes com o início rápido do Bigtable e funcionou bem para mim:

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            |
+--------+-----------------+---------------------------+-----------------------+

A única coisa que fiz de diferente foi usar um caminho local como em:

--external_table_definition=big-table-definition.json

Alterando isso de volta para:

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

E eu recebi o mesmo erro:

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.
Guillem Xercavins
fonte
Interessante, eu não tenho tempo para verificar que agora, mas graças ao esforço
Kris