BigTable bağlantılı BigQuery, hiçbir sorguyu yürütemez


9

BigTable'daki verilere dayanarak bazı raporlar oluşturmak istiyorum. Bunun için BigTable'dan en son verileri alacak ve veri stüdyosu raporuna iletecek bir sorgu oluşturmak istedim. Şimdi sorun şu ki, BigQuery'de bir BigTable bağlantısı oluşturduğumda, boş tabloda bile herhangi bir sorgu yürütemiyorum. BigQuery için türü aşağıdaki şekilde oluşturuyorum:

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

ve komut başarıyla yürütülür. Benim big-table-definition.jsonşöyle görünüyor:

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

Basit bir select *sorgu yaparken hata aşağıdaki gibi görünür:

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.

İlk önce BigTable'da bazı verilerden şüpheleniyordum ama oradan her şeyi sildiğimde hala hata oluşuyor. Ben "sourceFormats" birkaç satır aşağı hata bildirilen pozisyon değiştiğinde json dosyası kendisi ile bir şey olması gerektiğini öğrendim. Burada neyi yanlış yapıyorum?

Yanıtlar:


1

durumunuzu yeniden oluşturduk ve aynı hatayı buldum. Bana öyle geliyor ki bq mk komutunu çalıştırdığınızda hiç veri çıkarmıyor.

Bir workarroud olarak verilerinizi Cloud Storage'a bir .avro dosyası olarak çıkarmak ve ardından verilerinizi Bigquery'deki bir veri kümesine içe aktarmak için bir Dataflow işi çalıştırmanızı öneririm.


Bigtable avro dosyalarının (avro dosyalarını kabul etmesine rağmen) BigQuery'ye alınabileceğine inanmıyorum
Billy Jacobson

1

Sanırım sorunu yeniden ürettiğim için buldum. Hata mesajı kafa karıştırıcı ama burada belgelendiği gibi :

JSON şema dosyasını el ile oluşturmanız ve yerel makinenizde olması gerekir. Cloud Storage'da veya Google Drive'da depolanan bir JSON şema dosyasına başvurma desteklenmez.

Bigtable hızlı başlangıç ile bazı testler yaptım ve benim için iyi çalıştı:

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

Farklı yaptığım tek şey, olduğu gibi yerel bir yol kullanmaktı:

--external_table_definition=big-table-definition.json

Bunu şu şekilde değiştiririz:

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

Aynı hatayı aldım:

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.

İlginç, şimdi kontrol etmek için zamanım yok ama çaba için teşekkürler
Kris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.