有没有办法获取stale_after
流的作为选择以将其用作条件?
我知道您可以使用 SHOWS STREAMS 并且它给出了参数,但我想将时间戳用于另一个逻辑,有没有办法做到这一点?
有没有办法获取stale_after
流的作为选择以将其用作条件?
我知道您可以使用 SHOWS STREAMS 并且它给出了参数,但我想将时间戳用于另一个逻辑,有没有办法做到这一点?
我想了解 Snowflake 中数据库对象未来所有权分配的角色。例如,假设我有一个名为“ DB
”的数据库和一个名为“ ”的角色Role_1
,该角色当前拥有所有数据库对象的所有权。
现在,我已将所有未来对象的所有权更改为“ Role_2
.” 如果我创建一个新表或架构,我可以看到“ Role_2
”是所有者,而对于现有表,所有者仍然是“ Role_1
”。这是预期的结果。
但是,我很好奇是否有一种方法可以在创建对象之前确定对象的未来所有者。在上面的情况下,在创建新表或模式之前,我不知道 Role_2 将是所有者
大厅,
我在雪花环境中跨属于不同角色的表执行联接时遇到问题。
这是场景:
我们有两个角色:role_1,可以访问 TableA,role_2,可以访问 TableB。我们已将 role_1 和 role_2 分配给用户。现在,用户需要在TableA和TableB之间执行连接操作。然而,由于一次只能访问一个角色的限制,他们遇到了错误。
我有一个 JSON 数组
'[
{"key": "cId", "value": "d03ce656"},
{"key": "cName", "value": "Healthcare"},
{"key": "pId", "value": "d869628b"},
{"key": "pName", "value": "ConveYour"}
]
我想将其转换为
{
"cId": "d03ce656",
"cName": "Healthcare",
"pId" : "d869628b",
"pName": "ConveYour"
}
到目前为止我已经尝试过
SELECT
OBJECT_CONSTRUCT(
parse_json(f.value):key::string,
parse_json(f.value):value::string
) AS json_object
FROM LATERAL FLATTEN(INPUT => PARSE_JSON('[
{"key": "cId", "value": "d03ce656"},
{"key": "cName", "value": "Healthcare"},
{"key": "pId", "value": "d869628b"},
{"key": "pName", "value": "ConveYour"}
]')) AS f;
但它给了我
JSON_OBJECT
{ "cId": "d03ce656" }
{ "cName": "Healthcare" }
{ "pId": "d869628b" }
{ "pName": "ConveYour" }
我不需要 4 行,而是一个元素 { "cId": "d03ce656", "cName": "Healthcare", "pId" : "d869628b", "pName": "ConveYour" }
我被困在连接上,并且我认为我没有使用正确的连接类型。
我有表1:
ID | 时间 | 行动 |
---|---|---|
1 | 1/1/23 08:00 | 速率验证 |
1 | 1/1/23 09:00 | 速率验证 |
1 | 1/1/23 12:00 | 速率验证 |
1 | 1/1/23 16:00 | 利率变化 |
和表2:
ID | 时间 | 总下载量 |
---|---|---|
1 | 1/1/23 08:00 | 10 |
1 | 1/1/23 09:00 | 20 |
1 | 1/1/23 11:00 | 40 |
1 | 1/1/23 17:00 | 95 |
并想像这样加入表:
ID | 时间 | 行动 | 总下载量 |
---|---|---|---|
1 | 1/1/23 08:00 | 速率验证 | 10 |
1 | 1/1/23 09:00 | 速率验证 | 20 |
1 | 1/1/23 11:00 | 无效的 | 40 |
1 | 1/1/23 12:00 | 速率验证 | 无效的 |
1 | 1/1/23 16:00 | 利率变化 | 无效的 |
1 | 1/1/23 17:00 | 无效的 | 95 |
我努力了:
from table1
left join table2 on (table1.id=table2.id) and (table1.time=table2.time or table1.time is null or table2.time is null)
然而,这排除了表 2 中不存在于表 1 中的时间
预先感谢您的建议
我知道一旦创建了数据框,加载特定列就变得非常容易。例如:
df_selected = df.select("col1", "col2", "col3")
但是,如果 col3 包含 JSON 数据而我只是不想要全部数据,会发生什么情况。这是该列中的一个这样的值:
如果我在 SQL 中(在 Snowflake 中)查询这个并且只想要设计器,我可以写如下:
从 df 选择 col3:Construction_method:CAD:designer
我在 Snowpark 中尝试了以下代码的各种变体,但都不起作用:
df_selected = df.select("col3:Construction_method:CAD:designer")
有没有什么方法可以实现这一点,或者是否需要在数据框最初创建时完成,因此可以用 SQL 编写,如下所示:
session.sql("从 DF 选择 col3:Construction_method:CAD:designer")
理想情况下,我想在 Snowpark 创建初始 DF 之后执行此操作。
我有许多外部表位于 S3 中的 csv 文件上。我在数字列中有字符串值,应将其解析为空,例如“na”。当我使用文件格式查询阶段时,这按预期工作。但是,在外部表中使用时出现错误“无法将变体值“na”修改为固定。任何人都能够帮助我理解为什么会出现这种情况?
create or replace file format csv_format
type = csv
field_delimiter = '||'
skip_header=1
encoding='ISO-8859-15'
null_if = 'na'
field_optionally_enclosed_by = '"'
create or replace external table ext_tbl(
col1 data as (value:c1::date)
,col2 number(18,2) as (value:c2::number(18,2)
)
location=@stage
file_format = 'csv_format';
我的表有数百列,因此我不想在列定义中使用 nullif。
我知道我可以在存储过程中执行此操作。然而,每当我只是创建一个基本查询时,Snowflake 让我使用的只是“Set vParmeter1 =”; 命令这将我限制为 256 个字符,这是限制。我知道 varchar 可以达到 16mb,如 DECLARE vParameter VARCHAR(16777216); 中所示 我在我的程序中使用了这个。我不知道如何在脚本中使用它。我一直在尝试将有效的方法和“应该”有效的方法结合起来,但出于某种原因,Snowflake 喜欢重写如何执行 SQL 的书籍。下面我的代码错误和 VARCHAR(),如果您注释掉 Declare 它可以工作。被注释掉的第二组我看到其他人在使用,所以我尝试过,但它从未到达那里,所以我放弃了它。错误发生在 EOF 第 1 行,就在 varchar 大小的最后 6 处。
DECLARE vParameter1 VARCHAR(16777216);
SET vParameter1 = '700,145,138,159';
--SET vParameter1 := '700,145,138,159';
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table($vParameter1,',')) AS table1
以下是在我的机器上对我有用的最终答案,基于对已投票答案的帮助。
EXECUTE IMMEDIATE $$
DECLARE
vParameter1 VARCHAR(16777216) := '700,145,138,159';
res RESULTSET;
BEGIN
-- alternative to declare block
-- LET vParameter1 VARCHAR(16777216) := '700,145,138,159';
res := (
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1
);
/* -- if no resultset is expected then simply:
INSERT INTO some_table(col)
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1;
*/
RETURN TABLE(res);
END;
$$;
例如,我有以下代码create table if not exists table_name (lease no. varchar(255))
它显示
出乎意料的“不”。
,有没有办法让雪花的列名称中包含点?
要求:要获取在所有行中具有唯一值的 single_address_object 示例如下数据,国家和地区在所有行中都是通用的
id , address
----------------
111 , { "City": "Garner", "Country": "US", "County": "Hancock", "Line1": "490 W 8th St", "PostalCode": "50438", "Region": "TX" }
111 , { "City": "Colleyville", "Country": "US", "County": "Tarrant", "Line1": "1002 Saddlebrook Dr", "PostalCode": "76034", "Region": "TX" }
111 , { "City": "Dublin", "Country": "US", "County": "Franklin", "Line1": "545 Metro Pl S Ste 100", "PostalCode": "43017", "Region": "TX" }
输出
需要如下新列
single_address_object
----------------------
{"Country:"US", "Region":"TX"}