#datetime #google-cloud-platform #google-bigquery #external-tables
#python #Часовой пояс #google-облачная платформа #google-bigquery
Вопрос:
У меня есть таблица как таковая:
и файл как таковой:https://storage.googleapis.com/test_share_file/testTimestamp.csv
и я загружаю файл в большой запрос, используя python как таковой:
from google.cloud import bigquery as bq
gs_path = 'gs://test_share_file/testTimestamp.csv'
bq_client = bq.Client.from_service_account_json(gcp_creds_fp)
ds = bq_client.dataset('test1')
tbl = ds.table('testTimestamp')
job_config = bq.LoadJobConfig()
job_config.write_disposition = bq.job.WriteDisposition.WRITE_APPEND
job_config.skip_leading_rows = 1 # skip header
load_job = bq_client.load_table_from_uri(gs_path, tbl, job_config=job_config)
res = load_job.result()
и все же в таблице обе временные метки указаны во времени UTC!
Как мне сделать так, чтобы вторая колонка была по восточному времени?
Ответ №1:
Вы можете «преобразовать» первый столбец в восточное время на лету — что-то вроде примера ниже
#standardSQL
WITH t AS (
SELECT TIMESTAMP '2018-05-07 22:40:00 00:00' AS ts
)
SELECT ts, STRING(ts, '-04:00') timestamp_eastern
FROM t
Я имею дело с … упрямством…
Вы можете создать представление, которое будет содержать всю необходимую вам логику, поэтому клиент будет запрашивать это представление вместо исходной таблицы
#standardSQL
CREATE VIEW `project.dataset.your_view` AS
SELECT ts, STRING(ts, '-04:00') timestamp_eastern
FROM `project.dataset.your_table`
Я действительно считаю странным, что большой запрос не может отображать время в часовом поясе
Временная метка представляет собой абсолютный момент времени, не зависящий от какого-либо часового пояса или соглашения, такого как переход на летнее время.
Часовые пояса используются при разборе временных меток или форматировании временных меток для отображения. Само значение временной метки не хранит определенный часовой пояс. Временная метка в формате строки может включать часовой пояс. Когда часовой пояс явно не указан, используется часовой пояс по умолчанию, UTC.
Подробнее о Timestamp type
Комментарии:
1. У большого запроса не может быть столбца, который находится в часовом поясе, отличном от utc?
2. @RSHAP — Я второй Эллиот, и именно поэтому я думаю, что мой ответ по-прежнему подходит для вас. По состоянию на
client ... does not know sql
— вам следует приложить дополнительные усилия, чтобы обучить клиента хотя бы некоторым основам, иначе у вас все равно возникнут проблемы позже. незнание Sql в наши дни похоже на полное незнание базового английского. Так что, если этот клиент важен для вас — сделайте это: o)3. @RSHAP — понял. мы все время сталкиваемся с такой ситуацией (упрямство клиента), если вы можете предоставить более подробную информацию о вашем конкретном варианте использования — мы могли бы помочь больше. в основном — как ваш клиент ожидает использовать / потреблять данные, если они не желают изучать sql? и т.д. Тем временем смотрите Обновление, которое я добавил в своем ответе
4. -04:00 — это смещение от UTC, но не часовой пояс. Восточное время в США и Канаде чередуется между -05:00 и -04:00 для DST. Вам нужен способ указать tzid, подобный
America/New_York
, чтобы он мог решить, какое смещение действует для каждой временной метки. Я не уверен, поддерживается ли это в этой среде или нет.5. Это так. Вы можете передать это как строку часового пояса.