Big Query Pivot 2列中的多列
Big Query Pivot multiple columns in 2 columns
如何在 Big Query 中 transform/pivot:
来自这里:
solution sentiment groups feeling playing doing
I am good positive ['good', 'am'] 1 0 0
I am playing positive ['playing', 'am'] 0 1 1
She is running positive ['running', 'she] 0 1 0
He is not eating negative ['eating'] 1 0 1
收件人:
solution sentiment groups name value
I am good positive ['good', 'am'] feeling 1
I am good positive ['good', 'am'] playing 0
I am good positive ['good', 'am'] doing 0
I am playing positive ['playing', 'am'] feeling 0
I am playing positive ['playing', 'am'] playing 1
I am playing positive ['playing', 'am'] doing 1
She is running positive ['running', 'she] feeling 0
She is running positive ['running', 'she] playing 1
She is running positive ['running', 'she] doing 1
He is not eating negative ['eating'] feeling 1
He is not eating negative ['eating'] playing 0
He is not eating negative ['eating'] doing 1
我试过这种方法,但我缺少 name
列...其余看起来不错。
SELECT solution, sentiment, groups, value
FROM table
LEFT JOIN UNNEST ([feeling, playing doing] ) AS value
我试过这样获取 name
列,但没有成功,因为它给出了错误的结果:
SELECT solution, sentiment, groups, value, name
FROM table,
UNNEST (['feeling', 'playing','doing']) AS name
LEFT JOIN UNNEST ([feeling, playing, doing] ) AS value
可能需要 UNNEST
name
列以一种很好的方式。
如何创建 name
列?
您可以为此使用 UNPIVOT
operator:
CREATE TEMP TABLE t (
solution STRING,
sentiment STRING,
`groups` ARRAY<STRING>,
feeling BOOLEAN,
playing BOOLEAN,
doing BOOLEAN
);
INSERT INTO t
(solution, sentiment, `groups`, feeling, playing, doing)
VALUES
('I am good', 'positive', ['good', 'am'], true, false, false),
('I am playing', 'positive', ['playing', 'am'], false, true, true),
('She is running', 'positive', ['running', 'she'], false, true, false),
('He is not eating', 'negative', ['eating'], true, false, true);
SELECT *
FROM t UNPIVOT(value FOR name IN (feeling, playing, doing));
returns
solution sentiment groups value name
He is not eating negative [eating] true feeling
He is not eating negative [eating] false playing
He is not eating negative [eating] true doing
I am good positive "[good,am]" true feeling
I am good positive "[good,am]" false playing
I am good positive "[good,am]" false doing
She is running positive "[running,she]" false feeling
She is running positive "[running,she]" true playing
She is running positive "[running,she]" false doing
I am playing positive "[playing,am]" false feeling
I am playing positive "[playing,am]" true playing
I am playing positive "[playing,am]" true doing
您使用 UNNEST
的想法也可以,您只需要将 name
和 value
保存在一个数组中即可:
SELECT solution, sentiment, `groups`, name, value
FROM t,
UNNEST (
ARRAY<STRUCT<name STRING, value BOOLEAN>>[('feeling', feeling), ('playing', playing), ('doing', doing)]
) ;
如何在 Big Query 中 transform/pivot:
来自这里:
solution sentiment groups feeling playing doing
I am good positive ['good', 'am'] 1 0 0
I am playing positive ['playing', 'am'] 0 1 1
She is running positive ['running', 'she] 0 1 0
He is not eating negative ['eating'] 1 0 1
收件人:
solution sentiment groups name value
I am good positive ['good', 'am'] feeling 1
I am good positive ['good', 'am'] playing 0
I am good positive ['good', 'am'] doing 0
I am playing positive ['playing', 'am'] feeling 0
I am playing positive ['playing', 'am'] playing 1
I am playing positive ['playing', 'am'] doing 1
She is running positive ['running', 'she] feeling 0
She is running positive ['running', 'she] playing 1
She is running positive ['running', 'she] doing 1
He is not eating negative ['eating'] feeling 1
He is not eating negative ['eating'] playing 0
He is not eating negative ['eating'] doing 1
我试过这种方法,但我缺少 name
列...其余看起来不错。
SELECT solution, sentiment, groups, value
FROM table
LEFT JOIN UNNEST ([feeling, playing doing] ) AS value
我试过这样获取 name
列,但没有成功,因为它给出了错误的结果:
SELECT solution, sentiment, groups, value, name
FROM table,
UNNEST (['feeling', 'playing','doing']) AS name
LEFT JOIN UNNEST ([feeling, playing, doing] ) AS value
可能需要 UNNEST
name
列以一种很好的方式。
如何创建 name
列?
您可以为此使用 UNPIVOT
operator:
CREATE TEMP TABLE t (
solution STRING,
sentiment STRING,
`groups` ARRAY<STRING>,
feeling BOOLEAN,
playing BOOLEAN,
doing BOOLEAN
);
INSERT INTO t
(solution, sentiment, `groups`, feeling, playing, doing)
VALUES
('I am good', 'positive', ['good', 'am'], true, false, false),
('I am playing', 'positive', ['playing', 'am'], false, true, true),
('She is running', 'positive', ['running', 'she'], false, true, false),
('He is not eating', 'negative', ['eating'], true, false, true);
SELECT *
FROM t UNPIVOT(value FOR name IN (feeling, playing, doing));
returns
solution sentiment groups value name
He is not eating negative [eating] true feeling
He is not eating negative [eating] false playing
He is not eating negative [eating] true doing
I am good positive "[good,am]" true feeling
I am good positive "[good,am]" false playing
I am good positive "[good,am]" false doing
She is running positive "[running,she]" false feeling
She is running positive "[running,she]" true playing
She is running positive "[running,she]" false doing
I am playing positive "[playing,am]" false feeling
I am playing positive "[playing,am]" true playing
I am playing positive "[playing,am]" true doing
您使用 UNNEST
的想法也可以,您只需要将 name
和 value
保存在一个数组中即可:
SELECT solution, sentiment, `groups`, name, value
FROM t,
UNNEST (
ARRAY<STRUCT<name STRING, value BOOLEAN>>[('feeling', feeling), ('playing', playing), ('doing', doing)]
) ;