2017-12-19 3 views
0

MySQL 테이블에 대한 액세스 로그를 가지고 있지만 최근에는 MySQL에 너무 많이 사용되었습니다. 그런 다음 Google BigQuery에 저장하기로 결정했습니다. 나는 그것이 더 나은 선택인지 모른다. 그러나 그것은 실행 가능하게 보인다. 누구나 그것에 대해 의견이 있으십니까? 좋습니다 ...액세스 로그 용 BigQuery API - 데이터가 손실됩니다.

Google BigQuery에 통합하기 시작했습니다. Flask (Python 프레임 워크)로 작은 응용 프로그램을 만들었습니다. 데이터를 수신하고 BigQuery에 보낼 끝점을 만들었습니다. 이제 내 일반적인 응용 프로그램은 내 Flask 응용 프로그램을 가리키는 URL로 데이터를 보내고, 차례 차례로 BigQuery로 보냅니다. 어떤 관찰이나 제안이 있습니까?

마침내 내 문제는 가끔 데이터를 잃어 버리고 있습니다. 결과를보기 위해 일반 응용 프로그램을 테스트하기 위해 스크립트를 만들었습니다. 스크립트를 여러 번 실행하고 일부 데이터를 잃어버린 것으로 나타났습니다. 때로는 동일한 데이터가 저장되고 때로는 저장되지 않기 때문입니다. 누군가 어떤 일이 일어날 수 있는지 생각하고 있습니까? 그리고 가장 중요한 것은 .. 어떻게 내가 그 사건에서 데이터를 잃을 수 없습니까? 내 애플리케이션이 데이터가 Google BigQuery에 전달되지 않았 음을 감지하고 다시 처리하려고 할 때 어떻게 준비 할 수 있습니까?

google-cloud-python 라이브러리 (참조 : https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html#tables)를 사용하고 있습니다.

내 코드 : 내가 예상했던대로 모든

+0

당신은 당신이 스트리밍이 일부 행이 타임 아웃 할 수 삽입하지만, 다른 사람들이 지속처럼 버그가 발생한 것을 구현 과정에서 어쩌면/스트림 데이터를로드하는 방법을 자세히해야하고, 만 행을 다시 시도 할 필요가 시간 초과가 표시되었습니다. – Pentium10

+0

@ Pentium10 자세한 내용을 알려 주셨습니다. – user3707567

답변

1

, 당신은 errors을 처리하지 않는 것입니다

client = bigquery.Client(project=project_id) 
table_ref = client.dataset(dataset_id).table(table_id) 
SCHEMA = [SchemaField(**field) for field in schema] 
errors = client.create_rows(table_ref, [row], SCHEMA) 

. 스트리밍 삽입 작업이 어떻게 처리되고 이해되는지 확인하십시오. 1000 개의 행을 스트리밍하고 56 개의 행을 스트리밍하면 그 행이 다시 생기므로 56 개의 행만 재 시도해야합니다. 또한 insertId이 중요합니다.

Streaming Data into BigQuery

+0

** insertId ** (https://cloud.google.com/bigquery/troubleshooting-errors#streaming)를 의미합니까? 각 행에 대해 고유 한 insertId를 어떻게 가질 수 있습니까? – user3707567

+0

마이크로 시간 및 일부 guid를 사용하여 계산할 수 있습니다. – Pentium10

관련 문제