标签: snowflake-cloud-data-platform

SQL 编译错误:语法错误第 5 行位于位置 157 意外的“<EOF>”

这里可能出了什么问题?

create or replace temp table Whse_Role_Spend as
with 
Warehouse_Spend as (select sum(total_elapsed_time) Total_Elapsed, warehouse_name from 
"SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" group by warehouse_name),
Role_Spend as (select sum(total_elapsed_time) Total_Elapsed, warehouse_name, role_name from 
"SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" group by warehouse_name, role_name),
Credits_Used as (select sum(Credits_used) Credits_Used, warehouse_name from 
"SNOWFLAKE"."ACCOUNT_USAGE"."WAREHOUSE_METERING_HISTORY" group by warehouse_name)
Run Code Online (Sandbox Code Playgroud)

sql syntax-error snowflake-cloud-data-platform

0
推荐指数
1
解决办法
2万
查看次数

如何使用 R 和 dplyr.snowflakedb 列出架构中的表

我可以使用以下代码块创建与数据库的连接:

library("RJDBC", "DBI")
library("dplyr.snowflakedb")
library("dplyr")

options(dplyr.jdbc.classpath = "/jar_files/snowflake-jdbc-3.10.0.jar")

conn <- src_snowflakedb(
  user = "username",
  password = "password",
  account = "account",
  host = "account.eu-west-1.snowflakecomputing.com",
  opts = list(
              warehouse = "PUBLIC",
              db = "PROD",
              schema = "SCHEMA")
)
Run Code Online (Sandbox Code Playgroud)

当我跑步时:

class(conn)
Run Code Online (Sandbox Code Playgroud)

我得到:

类(conn)[1]“src_snowflakedb”“src_sql”“src”

如果我跑

db_list_tables(conn$con)
Run Code Online (Sandbox Code Playgroud)

结果是:

db_list_tables(conn$con) [1] "GA_CUSTOMER_CDP_TP" "APPLICABLE_ROLES" "COLUMNS" "DATABASES"
[5] "ENABLED_ROLES" "EXTERNAL_TABLES" "FILE_FORMATS" "FUNCTIONS"
[9] "INFORMATION_SCHEMA_CATALOG_NAME" "LOAD_HISTORY" "OBJECT_PRIVILEGES" "PIPES "
[13] "PROCEDURES" "REFERENTIAL_CONSTRAINTS" "REPLICATION_DATABASES" "SCHEMATA"
[17] "SEQUENCES" "STAGES" "TABLES" "TABLE_CONSTRAINTS"
[21] "TABLE_PRIVILEGES" "TABLE_STORAGE_METRICS" "USAGE_PRIVILEGES" "VIEWS"
[25] " APPLICABLE_ROLES" "COLUMNS" "DATABASES" …

r dplyr snowflake-cloud-data-platform

0
推荐指数
1
解决办法
2298
查看次数

将默认时间戳添加到雪花表中

我正在尝试使用以下代码将时间戳类型的新列添加到具有默认值的表中;

ALTER TABLE "DATABASE"."SCHEMA"."TABLE" ADD COLUMN PRESENT_TIME TIMESTAMPNTZ DEFAULT CONVERT_TIMEZONE('UTC',current_timestamp())::TIMESTAMP_NTZ
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误;

SQL编译错误:列默认表达式无效 [CAST(CONVERT_TIMEZONE('UTC', CAST(CURRENT_TIMESTAMP() AS TIMESTAMP_TZ(9))) AS TIMESTAMP_NTZ(9))]

编辑

ALTER TABLE "DATABASE"."SCHEMA"."TABLE" ADD COLUMN PRESENT_TIME TIMESTAMP
DEFAULT CURRENT_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)

错误:

列默认表达式 [CURRENT_TIMESTAMP()] 无效

我可以寻求帮助来纠正这个错误吗?谢谢

snowflake-cloud-data-platform

0
推荐指数
1
解决办法
7894
查看次数

计算雪花比例的最佳方法是什么

假设我有某种离散变量,比如说一个字符串,我想知道该字符串的每个值出现的比例。Snowflake 有推荐的方法吗?

snowflake-schema snowflake-cloud-data-platform

0
推荐指数
1
解决办法
1561
查看次数

如何替换雪花中的小时/分钟/秒?

我有一个包含日期时间值的列,如下所示:

在此输入图像描述

我想将所有小时/分钟和秒替换为全 0。像这样的东西:

在此输入图像描述

有没有办法做到这一点?

sql snowflake-schema snowflake-cloud-data-platform

0
推荐指数
1
解决办法
627
查看次数

从 Snowflake 查询 delta Lake 以读取最新版本

我想使用该命令将 Databricks 上的 Delta 表中的数据加载到 Snowflake 上的表中MERGE INTO

目标是 Databricks 上的 Delta 表中的记录数量与 Snowflake 上的表中的记录数量看起来相同。

发生的问题是,由于 Delta Lake(S3 路径)有多个版本,Snowflake 会查询重复记录。

如何才能只读取最新版本的 Delta Lake?

MERGE INTO myTable as target USING (
    SELECT
    $1:DAY::TEXT AS DAY,
    $1:CHANNEL_CATEGORY::TEXT AS CHANNEL_CATEGORY,
    $1:SOURCE::TEXT AS SOURCE,
    $1:PLATFORM::TEXT AS PLATFROM,
    $1:LOB::TEXT AS LOB
    FROM @StageFilePathDeltaLake
    (FILE_FORMAT => 'sf_parquet_format')
  ) as src 
        ON target.CHANNEL_CATEGORY = src.CHANNEL_CATEGORY 
        AND target.SOURCE = src.SOURCE 
WHEN MATCHED THEN
UPDATE SET 
 DAY= src.DAY
,PLATFORM= src.PLATFORM
,LOB= src.LOB
WHEN NOT MATCHED THEN
INSERT …
Run Code Online (Sandbox Code Playgroud)

snowflake-cloud-data-platform delta-lake

0
推荐指数
1
解决办法
3688
查看次数

-1
推荐指数
1
解决办法
156
查看次数

雪花缓存

我在一些地方读到 Snowflake 中有 3 个级别的缓存:

  1. 元数据缓存。在全局服务层中维护。这包括与微分区相关的元数据,例如列中的最小值和最大值、列中不同值的数量。这使得查询SELECT MIN(col) FROM table能够在不需要虚拟仓库的情况下返回,因为元数据已被缓存。

  2. 查询结果缓存。这也由全局服务层维护,并将查询的结果集保存 24 小时(如果在此期间运行相同的查询,则会延长 24 小时)。

  3. 仓库数据缓存。它由本地附加存储(通常是 SSD)中的查询处理层维护,并包含从存储层提取的微分区。

https://www.linkedin.com/pulse/caching-snowflake-one-minute-arangaperumal-govindsamy/

然后我还在 Snowflake 文档中读到这些缓存存在:

  1. 结果缓存:保存过去 24 小时内执行的每个查询的结果。这些可跨虚拟仓库使用,因此返回给一个用户的查询结果可供系统上执行相同查询的任何其他用户使用,前提是基础数据未更改。

  2. 本地磁盘缓存。这用于缓存 SQL 查询使用的数据。每当给定查询需要数据时,都会从远程磁盘存储中检索数据,并将其缓存在 SSD 和内存中。

  3. 远程磁盘缓存。这可以进行长期存储。此级别负责数据弹性,对于 Amazon Web Services,意味着 99.999999999% 的持久性。即使整个数据中心发生故障。

https://community.snowflake.com/s/article/Caching-in-Snowflake-Data-Warehouse

这之间的对应关系是什么?两者都有查询结果缓存,但为什么雪花文档中没有提到元数据缓存?雪花文档中提到的远程磁盘缓存是否包含在仓库数据缓存中(我认为不应该是。

那么Snowflake中真的有4种类型的缓存吗?:

  1. 元数据缓存
  2. 查询结果缓存
  3. 本地磁盘缓存
  4. 远程磁盘缓存

snowflake-schema snowflake-cloud-data-platform

-1
推荐指数
1
解决办法
5231
查看次数

如何从表中抽取 10% 的数据?

如何从 Snowflake 中的表返回 10% 的行。例如,如何在对表进行排序后返回第 10、20、30 行。

sql snowflake-schema snowflake-cloud-data-platform

-1
推荐指数
1
解决办法
408
查看次数