BigTable 연결이있는 BigQuery는 쿼리를 실행할 수 없습니다.


9

BigTable의 데이터를 기반으로 일부 보고서를 생성하고 싶습니다. 이를 위해 BigTable에서 최신 데이터를 가져 와서 데이터 스튜디오 보고서로 전달하는 쿼리를 만들고 싶었습니다. 이제 문제는 BigQuery에서 BigTable 연결을 만들 때 빈 테이블에서도 쿼리를 실행할 수 없다는 것입니다. 다음과 같은 방식으로 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에서 일부 데이터가 의심되었지만 모든 것을 삭제해도 오류가 계속 발생합니다. "sourceFormats"를 몇 줄 아래로 이동하면 오류 변경 위치가보고 된 것처럼 json 파일 자체에 문제가 있음을 알았습니다. 내가 여기서 뭘 잘못하고 있니?

답변:


1

방금 사건을 재현하고 정확히 같은 오류를 발견했습니다. bq mk 명령을 실행할 때 데이터를 전혀 추출하지 않는 것처럼 보입니다.

작업 담당자로서 Dataflow 작업 을 실행 하여 Cloud Storage에 .avro 파일로 데이터를 추출한 다음 Bigquery의 데이터 세트로 데이터를 가져 오는 것이 좋습니다.


나는 Bigtable을 아 브로 파일의 BigQuery (는 브로 파일을 허용하더라도)로 가져올 수 할 수 있다고 생각하지 않습니다
— 빌리 제이콥슨

1

문제를 재현 할 수있어 문제를 발견 한 것 같습니다. 오류 메시지는 혼란 스럽지만 여기에 설명되어 있습니다 .

JSON 스키마 파일을 수동으로 작성해야하며 로컬 시스템에 있어야합니다. Cloud Storage 또는 Google 드라이브에 저장된 JSON 스키마 파일을 참조하는 것은 지원되지 않습니다.

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.

흥미롭게도, 지금 그것을 확인할 시간이 없지만
— Kris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.