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?

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.


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.

Interessante, eu não tenho tempo para verificar que agora, mas graças ao esforço
Kris
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.