значения строк в столбцах и имена столбцов в значениях bigquery - PullRequest
0 голосов
/ 16 марта 2020

я пытаюсь создать новую таблицу, в которой есть два столбца 'tags', 'cnt'

'tags' будет содержать имена столбцов, так как значения

'cnt' содержат значение в столбце происхождения

origin table

Desire table

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  TRIM(SPLIT(kv, ':')[OFFSET(0)], '"') tag,
  SPLIT(kv, ':')[SAFE_OFFSET(1)] cnt
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TRIM(TO_JSON_STRING(t), '{}'), r'(.*?)(?:,|$)')) kv  

Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 8279 all_close, 4 all_open, 1504 only_o, 16785 only_f 
)
SELECT 
  TRIM(SPLIT(kv, ':')[OFFSET(0)], '"') tag,
  SPLIT(kv, ':')[SAFE_OFFSET(1)] cnt
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TRIM(TO_JSON_STRING(t), '{}'), r'(.*?)(?:,|$)')) kv  

с результатом

Row tag         cnt  
1   all_close   8279     
2   all_open    4    
3   only_o      1504     
4   only_f      16785    
0 голосов
/ 16 марта 2020

Вы можете отключить, используя массивы:

select el.which, el.cnt
from t cross join
     (unnest([struct('ALL_CLOSE' as which, t.all_close as cnt),
              struct('ALL_OPEN' as which, t.all_open as cnt),
              . . .
             ])) u(el)
...