>source

저는 Google BigQuery를 처음 접했고 확실히 어려움을 겪고 있습니다.

내 테이블에는 다음과 같은 내용이 있습니다.

+----------+----------------------------------------+
| order_id |               line_items               |
+----------+----------------------------------------+
|      123 | id:1|qy:1|sum:1.00;id:2|qy:6|sum:4.50; |
+----------+----------------------------------------+
|      456 | id:1|qy:3|sum:3.00;id:3|qy:4|sum:3.20; |
+----------+----------------------------------------+

다음과 같이 보일 필요가 있습니다.

+----------+----+----+------+
| order_id | id | qy | sum  |
+----------+----+----+------+
|      123 |  1 |  1 | 1.00 |
|      123 |  2 |  6 | 4.50 |
|      456 |  1 |  3 | 3.00 |
|      456 |  3 |  4 | 3.20 |
+----------+----+----+------+

line_items에있는 키 값 쌍의 양은 임의적입니다 (3 개보다 훨씬 많지만이 3 개를 추출해야 함).

다음 UNNEST 및 SPLIT 쿼리가 작동하도록 할 수 있었지만 불행히도 여전히 이러한 키-값 쌍이 있습니다.

SELECT
  order_id,
  line_items
FROM
  `myTable`,
  UNNEST(SPLIT(line_items,"|")) line_items

나를 여기로 데려옵니다 :

+----------+------------+
| order_id | line_items |
+----------+------------+
|      123 | id:1       |
|      123 | qy:1       |
|      123 | sum:1.00   |
|      123 | id:2       |
|      123 | qy:6       |
|      123 | sum:4.50;  |
|      456 | id:1       |
|      456 | qy:3       |
|      456 | sum:3.00   |
|      456 | id:3       |
|      456 | qy:4       |
|      456 | sum:3.20   |
+----------+------------+

그래서 나는 여전히 열 제목과 열 내용에 대한 값으로 이러한 키를 추출하는 방법을 실제로 할 수 없습니다.

누군가가 나를 올바른 방향으로 안내 해주면 매우 감사하겠습니다.

벌써 감사합니다!

  • 답변 # 1

    다음은 BigQuery 표준 SQL 용입니다.

    #standardSQL
    select order_id, 
      ( select split(kv, ':')[offset(1)] from x.kvs kv where split(kv, ':')[offset(0)] = 'id') id,
      ( select split(kv, ':')[offset(1)] from x.kvs kv where split(kv, ':')[offset(0)] = 'qy') qy,
      ( select split(kv, ':')[offset(1)] from x.kvs kv where split(kv, ':')[offset(0)] = 'sum') sum
    from `project.dataset.table`,
    unnest(split(trim(line_items, ';'), ';')) items,
    unnest([struct(split(items,'|') as kvs)]) x
    -- order by order_id   
    
    

    질문의 샘플 데이터에 적용하려면 출력은

    위의 아래 변형도 유용 할 수 있습니다.

    #standardSQL
    select order_id, 
      (select value from z.y where key = 'id') id,
      (select value from z.y where key = 'qy') qy,
      (select value from z.y where key = 'sum') sum
    from `project.dataset.table`,
    unnest(split(trim(line_items, ';'), ';')) items,
    unnest([struct(split(items,'|') as kvs)]) x,
    unnest([struct(array(
      select as struct 
        split(kv, ':')[offset(0)] as key, 
        split(kv, ':')[offset(1)] value 
      from x.kvs kv
    ) as y)]) z
    -- order by order_id
    
    

관련 자료

  • 이전 html - 여백을 0px로 설정해도 CSS가 버튼 사이에 간격을 두는 이유
  • 다음 javascript - 다른 객체 배열 내부에있는 객체 배열 내부의 속성을 추출하고 결과를 문자열 배열로 가져옵니다