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.