2016-09-24 4 views
1

BigQuery를 사용하여 센서 데이터를 시계열로 저장하는 가능성을 조사하고 있습니다. 그 의도는 BQ에 데이터를 저장하고 Pandas에서 처리하는 것입니다 ... 지금까지 그렇게 좋았습니다 ... Pandas는 TIMESTAMP 필드 인덱스를 해석하고 Series를 생성 할 수 있습니다.BigQuery 임의 태그에 대한 스키마 디자인

데이터는 임의의 태그를 키/값 쌍 (예 : job_id = 1234, task_id = 5678)으로 지원한다는 추가 요구 사항이 있습니다. BigQuery의 유형의 RECORD 반복 필드를 잘이를 지원할 수있는 것은 :

    {'fields': 
         [ 
          { 
           "mode": "NULLABLE", 
           "name": "timestamp", 
           "type": "TIMESTAMP" 
          }, 
          { 
           "mode": "REPEATED", 
           "name": "tag", 
           "type": "RECORD", 
           "fields": 
           [ 
            { 
             "name":"name", 
             "type":"STRING" 
            }, 
            { 
             "name":"value", 
             "type":"STRING" 
            }, 
            { 
             "mode": "NULLABLE", 
             "name": "measurement_1", 
             "type": "FLOAT" 
            }, 
            { 
             "mode": "NULLABLE", 
             "name": "measurement_2", 
             "type": "FLOAT" 
            }, 
            { 
             "mode": "NULLABLE", 
             "name": "measurement_3", 
             "type": "FLOAT" 
            }, 
           ] 
          }, 
         ] 
        } 

이 데이터를 저장 위대한 작품과 내가 단 하나의 키/값 조합에 필터링해야 할 경우에도 쿼리 위대한 작품

SELECT measurement_1 FROM measurements 
WHERE tag.name = 'job_id' AND tag.value = '1234' 

그러나 쿼리 식에 태그 집합을 결합 할 수 있어야하므로이 작업을 수행 할 수 없습니다. 예를 들어이 쿼리는 결과를 반환하지 않습니다.

SELECT measurement_1 FROM measurements 
WHERE tag.name = 'job_id' AND tag.value = '1234' 
     AND tag.name = 'task_id' AND tag.value = '5678' 

질문 :이 스키마를 사용하여 원하는 작업을 수행 할 수있는 쿼리를 작성할 수 있습니까? Big Query에서이 유형의 변수 데이터를 고정 스키마에 연결하는 권장 방법은 무엇입니까?

도움이나 제안을 보내 주셔서 감사합니다.

참고 : InfluxDB에 대한 훌륭한 수정 프로그램 인 것처럼 보이는 이유는 그것이 내가 지금까지 사용해 왔던 것이기 때문입니다. 겉으로보기에는 극복 할 수없는 문제는 데이터 세트의 시리즈 카디널리티 양입니다. 그래서 대안을 찾고 있습니다.

+0

왜 태그 파이썬, 팬더, 그리고 시간 시리즈? – Kartik

+0

중요한 점은 게시 된 답변의 왼쪽에있는 투표를 사용하여 승인 된 답변을 표시 할 수 있습니다. 중요한 이유는 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235를 참조하십시오. 또한 대답에 투표하는 것이 중요합니다. 도움이되는 답변에 투표하십시오. 더 많은 것이 있습니다 ... 누군가가 당신의 질문에 대답 할 때 무엇을해야하는지 확인할 수 있습니다 - http://stackoverflow.com/help/someone-answers. –

답변

1

BigQuery의 레거시 SQL

SELECT measurement_1 FROM measurements 
OMIT RECORD IF 
    SUM((tag.name = 'job_id' AND tag.value = '1234') 
    OR (tag.name = 'task_id' AND tag.value = '5678')) < 2 

BigQuery의 표준 SQL 반복

SELECT measurement_1 FROM measurements 
WHERE (
    SELECT COUNT(1) FROM UNNEST(tag) 
    WHERE ((name = 'job_id' AND value = '1234') 
     OR (name = 'task_id' AND value = '5678')) 
) >= 2 
0

등 데이터 계열 컬렉션을 저장하기위한 좋은 방법을 반복 필드 바로 값으로부터 필터링하기 위해
하나의 관심도 다음 템플릿을 사용하겠습니다.

SELECT 
    MAX(IF(filter criteria, value_to_pull, null)) WITHIN RECORD AS some_name 
FROM <table> 

귀하의 경우 다음과 같습니다 :

SELECT 
    MAX(IF(tag.name = 'job_id' AND tag.value = '1234', measurement_1, NULL)) WITHIN RECORD AS job_1234_meassurement_1, 
    MAX(IF(tag.name = 'task_id' AND tag.value = '5678', measurement_1, NULL)) WITHIN RECORD AS task_5678_meassurement_1, 
    FROM measurements