这里可能出了什么问题?
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) 我可以使用以下代码块创建与数据库的连接:
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" …
我正在尝试使用以下代码将时间戳类型的新列添加到具有默认值的表中;
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 有推荐的方法吗?
我想使用该命令将 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 如何“柱状化”其所有数据?
我读过的任何内容都没有很好地解释它
我在一些地方读到 Snowflake 中有 3 个级别的缓存:
元数据缓存。在全局服务层中维护。这包括与微分区相关的元数据,例如列中的最小值和最大值、列中不同值的数量。这使得查询SELECT MIN(col) FROM table能够在不需要虚拟仓库的情况下返回,因为元数据已被缓存。
查询结果缓存。这也由全局服务层维护,并将查询的结果集保存 24 小时(如果在此期间运行相同的查询,则会延长 24 小时)。
仓库数据缓存。它由本地附加存储(通常是 SSD)中的查询处理层维护,并包含从存储层提取的微分区。
https://www.linkedin.com/pulse/caching-snowflake-one-minute-arangaperumal-govindsamy/
然后我还在 Snowflake 文档中读到这些缓存存在:
结果缓存:保存过去 24 小时内执行的每个查询的结果。这些可跨虚拟仓库使用,因此返回给一个用户的查询结果可供系统上执行相同查询的任何其他用户使用,前提是基础数据未更改。
本地磁盘缓存。这用于缓存 SQL 查询使用的数据。每当给定查询需要数据时,都会从远程磁盘存储中检索数据,并将其缓存在 SSD 和内存中。
远程磁盘缓存。这可以进行长期存储。此级别负责数据弹性,对于 Amazon Web Services,意味着 99.999999999% 的持久性。即使整个数据中心发生故障。
https://community.snowflake.com/s/article/Caching-in-Snowflake-Data-Warehouse
这之间的对应关系是什么?两者都有查询结果缓存,但为什么雪花文档中没有提到元数据缓存?雪花文档中提到的远程磁盘缓存是否包含在仓库数据缓存中(我认为不应该是。
那么Snowflake中真的有4种类型的缓存吗?:
如何从 Snowflake 中的表返回 10% 的行。例如,如何在对表进行排序后返回第 10、20、30 行。