Можно ли как-нибудь отформатировать результирующие наборы "таблицы значений" для Big Query с помощью инструмента командной строки bq
, используя Standard SQL? Это работает, как и ожидалось, в консоли BigQuery со стандартом SQL, но не в bq. Я не могу найти удобный обходной путь. Он также работает, как и ожидалось, используя Legacy SQL.
Мой пример использования: я изучаю таблицы с большим количеством столбцов в BigQuery. Анонимные запросы в BigQuery требуют, чтобы выбранные столбцы имели уникальное имя, в противном случае вы получите сообщение «Дублирующиеся имена столбцов в результате не поддерживаются. Найдено дубликатов: ...». Это очень строгое требование, когда я просто изучаю данные. К счастью, в веб-консоли BigQuery есть способ обойти это, используя таблицы значений в выражении выбора ...
with
left_side as
(
select 1 as id, 'hello' as col1 union all
select 2 as id, 'there' as col1
)
,right_side as
(
select 1 as id, 'hello' as col1 union all
select 2 as id, 'world' as col1
)
select a, b
from left_side a
join
right_side b
on a.id = b.id
..., что приводит к следующему табличному набору результатов с автоматически перечисляемыми столбцами, которые отлично ...
Однако тот же запрос при передаче в bq
в командной строке выглядит следующим образом (через документ здесь для вашего удобство). Обычно у меня есть запрос в файле, и я перенаправляю его в bq
, например, bq query --use_legacy_sql=false < bq_test4.sql
bq query --use_legacy_sql=false <<BQ_TEST
with
left_side as
(
select 1 as id, 'hello' as col1 union all
select 2 as id, 'there' as col1
)
,right_side as
(
select 1 as id, 'hello' as col1 union all
select 2 as id, 'world' as col1
)
select a, b
from left_side a
join
right_side b
on a.id = b.id
BQ_TEST
... приводит к тому же самому основному набору результатов независимо от переданных опций --format
на bq
...
+---------------------------+---------------------------+
| a | b |
+---------------------------+---------------------------+
| {"id":"1","col1":"hello"} | {"id":"1","col1":"hello"} |
| {"id":"2","col1":"there"} | {"id":"2","col1":"world"} |
+---------------------------+---------------------------+
Такой набор результатов мне не поможет.
Хорошо, я могу преобразовать json в табличный набор результатов с помощью ...
with
left_side as
(
select 1 as id, 'hello' as col1 union all
select 2 as id, 'there' as col1
)
,right_side as
(
select 1 as id, 'hello' as col1 union all
select 2 as id, 'world' as col1
)
select json_extract_scalar(to_json_string(a), "$['id']") as `a_id`
,json_extract_scalar(to_json_string(a), "$['col1']") as `a_col1`
,json_extract_scalar(to_json_string(b), "$['id']") as `b_id`
,json_extract_scalar(to_json_string(b), "$['col1']") as `b_col1`
from left_side a
join
right_side b
on a.id = b.id
..., что приведет к получению Legacy SQL ...
+------+--------+------+--------+
| a_id | a_col1 | b_id | b_col1 |
+------+--------+------+--------+
| 1 | hello | 1 | hello |
| 2 | there | 2 | world |
+------+--------+------+--------+
Необходимость перечисления столбцов противоречит цели моего варианта использования.
Есть ли какой-либо способ, при использовании Standard SQL, избегать перечисления столбцов до в мое присоединение или после моего присоединения?