Snowflake如何向时间类型字段插入随机时间戳及解决报错
问题原因
Snowflake的VALUES子句仅支持常量、确定性字面量作为插入值,不允许直接嵌套random()、uniform()这类运行时动态生成结果的非确定性函数,也不支持直接传入依赖这类函数的计算表达式,因此执行原SQL时会抛出如下错误:
Invalid expression [DATE_ADDSECONDSTOTIME(CAST(UNIFORM(1, 10, RANDOM()) AS NUMBER(2,0)), '12:52:29.050000000')] in VALUES clause
解决方法
你可以选择以下任意一种改法实现插入随机时间的需求:
- 方法1:将动态计算逻辑放到
SELECT子句中替代直接写VALUES,这是最简洁通用的写法
-- 建表语句不变 CREATE TABLE slipstream( visit_timestamp time); -- 用SELECT承载计算逻辑后插入 INSERT INTO slipstream SELECT dateadd(second, uniform(1, 10, random()), current_time());
- 方法2:如果需要保留VALUES语法结构,把动态计算逻辑包裹为标量子查询即可通过语法校验
CREATE TABLE slipstream( visit_timestamp time); INSERT INTO slipstream VALUES ( -- 用子查询包裹动态计算逻辑 (SELECT dateadd(second, uniform(1, 10, random()), current_time())) );
- 方法3:如果需要批量插入多行随机时间,搭配
GENERATOR函数效率更高,以下示例为一次性插入100条符合规则的随机时间记录
CREATE TABLE slipstream( visit_timestamp time); INSERT INTO slipstream SELECT dateadd(second, uniform(1, 10, random()), current_time()) FROM TABLE(GENERATOR(ROWCOUNT => 100));
内容的提问来源于stack exchange,提问作者Saqib Ali
相关产品推荐
相关产品推荐

