В дополнение к ответу Хеманта для дальнейшего вклада в сообщество я предоставлю альтернативный метод.
Как указано в документации , в BigQuery можно использовать параметризованные запросы с использованием интерфейса командной строки (CLI). Вам необходимо использовать флаг --parameter
в вашей команде bq query , чтобы указать переменные / параметры, которые вы будете использовать.
Этот флаг должен быть в формате name:type:value
. Хотя, если тип опущен, он будет использоваться как STRING . Как пример:
timediff= $(bq query --use_legacy_sql=false
--parameter='ts_value:TIMESTAMP:2016-12-07 08:00:00'
--parameter='ts_value1:TIMESTAMP:2016-12-07 09:00:00'
'SELECT
TIMESTAMP_DIFF(@ts_value,@ts_value1, HOUR)')
echo $timediff
И вывод:
+-----+
| f0_ |
+-----+
| -1 |
+-----+
Вы можете использовать --format=csv
для форматирования вывода в виде строки:
f0_ -1
Кроме того, я хотел бы добавить, что вы можете использовать псевдонимы для упрощения вашего запроса. Например:
alias bq_set="bq query --use_legacy_sql=false --format=pretty"
timediff=$(bq_set
--parameter='ts_value:TIMESTAMP:2016-12-07 08:00:00'
--parameter='ts_value1:TIMESTAMP:2016-12-07 09:00:00'
'SELECT
TIMESTAMP_DIFF(@ts_value,@ts_value1, HOUR)')
echo $timediff
Вывод:
+-----+
| f0_ |
+-----+
| -1 |
+-----+
Как видите, это была просто альтернатива простому вашему запросу.