Задачи Snowflake, вызывающие ошибку в часовом поясе в запросах - PullRequest
1 голос
/ 07 января 2020

Я выполняю простой запрос вставки внутри хранимой процедуры с to_timeatamp_ntz("column value") вместе с другими столбцами. Это работает нормально, когда я запускаю его с пользовательским интерфейсом снежинки и вошел в систему с моей учетной записью. Это прекрасно работает, когда я вызываю его, используя python скрипты из моего экземпляра Visual Studio. Сбой той же хранимой процедуры, когда она вызывается запланированной задачей. Я думаю, если это как-то связано с часовым поясом пользователя «Система» против моего часового пояса.

Ошибка выполнения в процедуре сохранения LOAD_Data (): не удалось привести значение варианта "2019-11- 27T13: 42: 03.221Z "в TIMESTAMP_NTZ В Statement.execute, строка 24, позиция 57

Я пытался указать часовой пояс в качестве параметров сеанса в задаче и в сохраненном pro c, но, похоже, не решать проблему. Есть идеи?

Ответы [ 2 ]

1 голос
/ 07 января 2020

Я предполагаю (поскольку вы не включили оператор SQL, вызывающий ошибку), что вы пытаетесь связать объект Date при создании объекта Statement. Это не сработает.

Единственные параметры, которые вы можете связать, это числа, строки, null и специальный объект SfDate, который вы можете получить только из набора результатов (насколько мне известно). Большинство других параметров должны быть преобразованы в string с использованием mydate.toJSON(), JSON.stringify(myobj), et c., Перед привязкой, например:

var stmt = snowflake.createStatement(
   { sqlText: `SELECT :1::TIMESTAMP_LTZ NOW`, binds: [(new Date).toJSON()] }
);

Date ошибки объекта могут вводить в заблуждение, поскольку Date объекты, вызывающие ошибку, могут быть преобразованы и отображены в виде строк в сообщении об ошибке.

0 голосов
/ 07 января 2020

Я обнаружил проблему: моя задача использовала эффект копирования-вставки, подобный следующему:

CREATE TASK TASK_LOAD_an_sp
  WAREHOUSE = COMPUTE_WH
  TIMEZONE = 'US/Eastern'  
SCHEDULE = 'USING CRON  0/30 * * * * America/New_York'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
AS
    Call LOAD_an_sp();

Формат ввода метки времени вызывал это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...