BigQuery với kết nối BigTable, không thể thực hiện bất kỳ truy vấn nào


9

Tôi muốn tạo một số báo cáo dựa trên dữ liệu trong BigTable. Vì vậy, tôi muốn tạo một truy vấn sẽ lấy dữ liệu mới nhất từ ​​BigTable và chuyển nó vào báo cáo của studio dữ liệu. Bây giờ vấn đề là khi tôi tạo kết nối BigTable trong BigQuery, tôi không thể thực hiện bất kỳ truy vấn nào, ngay cả trên bảng trống. Tôi tạo kiểu cho BigQuery theo cách sau:

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

và lệnh thực thi thành công. Hình của tôi big-table-definition.jsonnhư sau:

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

Lỗi khi thực hiện select *truy vấn đơn giản như sau:

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.

Đầu tiên tôi đã nghi ngờ một số dữ liệu trong BigTable nhưng khi tôi xóa mọi thứ từ đó thì lỗi vẫn xảy ra. Tôi đã phát hiện ra rằng nó phải là một cái gì đó với chính tệp json vì khi tôi di chuyển "sourceFormats" xuống một vài dòng, vị trí thay đổi lỗi được báo cáo. Tôi làm gì sai ở đây?

Câu trả lời:


1

chỉ cần sao chép trường hợp của bạn và tìm thấy lỗi chính xác tương tự. Tôi trông giống như khi bạn chạy lệnh bq mk, nó không trích xuất bất kỳ dữ liệu nào cả.

Là một cách giải quyết, tôi sẽ đề nghị bạn chạy một công việc Dataflow để trích xuất dữ liệu của bạn vào Cloud Storage dưới dạng tệp .avro và sau đó nhập dữ liệu của bạn vào bộ dữ liệu trong Bigquery.


Tôi không tin rằng các tệp avro Bigtable có thể được nhập vào BigQuery (mặc dù nó chấp nhận các tệp avro)
Billy Jacobson

1

Tôi nghĩ rằng tôi đã tìm thấy vấn đề khi tôi có thể tái tạo nó. Thông báo lỗi gây nhầm lẫn nhưng, như được ghi lại ở đây :

Bạn phải tạo tệp lược đồ JSON theo cách thủ công và nó phải nằm trên máy cục bộ của bạn. Tham chiếu tệp lược đồ JSON được lưu trữ trong Cloud Storage hoặc trong Google Drive không được hỗ trợ.

Tôi đã làm một số thử nghiệm với nhanh của Bigtable và nó hoạt động tốt với tôi:

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

Điều duy nhất tôi đã làm khác là sử dụng một đường dẫn cục bộ như trong:

--external_table_definition=big-table-definition.json

Thay đổi điều này trở lại:

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

Và tôi đã nhận được cùng một lỗi:

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.

Thật thú vị, tôi không có thời gian để kiểm tra điều đó ngay bây giờ nhưng cảm ơn vì nỗ lực
Kris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.