可以使用 Snowflake变量来确定源表,如下所示:
set src='some_table';
select count(*) from $src;
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找一种方法来提供数据库名称作为变量并将其与表名称连接起来。伪代码:
set db='database';
select count(*) from $db.table_name;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我想保留database并table_name分开(所以设置dbandtable=database.table_name不是一个选项)。
是否可以禁用 Snowflake SQL 日志记录,该日志记录数据库连接的开始和结束以及正在执行的所有查询,同时保持logging.basicConfig(level=logging.INFO)调试我的开发。
也许这不是特定于 Snowflake 而是来自 Python 的通用数据库连接?
我使用的是snowflake-connector-python1.8.1 版
我目前拥有的示例简化日志。
2019-06-10 16:27:10,015 INFO: /*Need this line*/
2019-06-10 16:27:10,015 INFO: Snowflake Connector for Python Version: 1.8.1, Python Version: 3.7.3, Platform: Windows-7-6.1.7601-SP1
2019-06-10 16:27:10,015 INFO: This connection is in OCSP Fail Open Mode. TLS Certificates would be checked for validity and revocation status. Any other Certificate Revocation related exceptions or OCSP Responder failures would be disregarded in favor of connectivity.
2019-06-10 16:27:10,020 INFO: Starting new HTTPS …Run Code Online (Sandbox Code Playgroud) python logging database-connection snowflake-cloud-data-platform
我正在尝试编写一个 SQL 查询来将 JSON 数据上传到 Snowflake DB 表中。
我写的查询如下所示:
insert into xyz_table(id, json_column) values (1, '{
"first_name": "John",
"last_name": "Corner",
"createddate": "2019-07-02T10:01:30+00:00",
"type": "Owner",
"country": {
"code": "US",
"name": "United States"
}
}');
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
SQL compilation error: Expression type does not match column data type, expecting VARIANT but got VARCHAR(182) for column CANONICAL_JSON
Run Code Online (Sandbox Code Playgroud)
请告诉我,如何在 Snowflake DB 表中使用 SQL 查询插入JSON 数据
我想以雪花形式显示时区,例如“美国/太平洋”或“GMT”。有没有什么函数可以表明这一点。像选择 current_timezone 这样的东西。
我在雪花中使用主键创建了下表,每当我尝试将数据插入该表时,它也允许重复记录。如何限制重复的id?
create table tab11(id int primary key not null,grade varchar(10));
insert into tab11 values(1,'A');
insert into tab11 values(1,'B');
select * from tab11;
Run Code Online (Sandbox Code Playgroud)
输出:插入重复记录。
ID GRADE
1 A
1 B
Run Code Online (Sandbox Code Playgroud) 在 Snowflake 中,我可以在不知道数组长度的情况下获取数组的第一个元素:
with foo as (
select array_construct('duck','duck','goose') as a
)
select a[0] from foo -- returns 'duck'
Run Code Online (Sandbox Code Playgroud)
但要获取最后一个元素,我不能使用 "pythonic" a[-1],因为select a[-1] from foo返回:
无效的提取路径“-1”:数组索引-1 是禁止的;必须介于 0 和 2,147,483,647 之间。
有趣的是,我可以用来array_slice()获取倒数第二个元素:
select array_slice(a,-2,-1) from foo -- returns 'duck'
Run Code Online (Sandbox Code Playgroud)
但不是最后一个元素,因为“输出包括最多但不包括参数指定的元素”(doc)。
怎样才能得到“鹅”呢?
将数据库上的导入权限授予角色- 这将为角色提供对数据库中“所有”对象的读取访问权限,而不是如何限制对数据库中的对象子集而不是数据库中的所有对象的读取访问权限。
我正在尝试创建一个连接字符串以从 Access 2010 及更高版本获取 Snowflake 数据。我可以创建数据库 DSN 并链接到我使用的表,但我需要为分布式应用程序构建无 DSN 的连接字符串。这是我到目前为止所得到的,它失败并显示消息“ODBC 连接到 xxxx 失败”。这是我到目前为止所拥有的:
ODBC;驱动程序={SnowflakeDSIIDriver}; 服务器= https://服务器名称;Role=角色名称;Warehouse=仓库名称;Database=数据库名称;Schema=架构名称;UID=雪花ID; PWD=雪花密码;
我有一个大的JSON文件,大约500万条记录和大约32GB的文件大小,我需要加载到我们的Snowflake数据仓库中.我需要将此文件分解为每个文件大约200k条记录(大约1.25GB)的块.我想在Node.JS或Python中执行此操作以部署到AWS Lambda函数,遗憾的是我还没有编写任何代码.我有C#和很多SQL经验,学习node和python都在我的待办事项列表中,所以为什么不直接进入,对吧!?
我的第一个问题是"哪种语言更适合这个功能?Python或Node.JS?"
I know I don't want to read this entire JSON file into memory (or even the output smaller file). I need to be able to "stream" it in and out into the new file based on a record count (200k), properly close up the json objects, and continue into a new file for another 200k, and so on. I know Node can do this, but if Python can also do this, I feel like it would be …
我正在尝试利用Snowflake中的date.js函数。
我已经在Snowflake中将其配置为可以作为UDF使用,但是,当我在具有多于1行的表的选择中使用该函数时,遇到了递归错误。
JavaScript执行错误:未捕获RangeError:DATEJS中的最大调用堆栈大小超出了'Date.prototype._toString = Date.prototype.toString; Date.prototype.toString = function(format){'位置82 stackstrace:DATEJS.Date.toString行:199 DATEJS.Date.toString行:228 DATEJS.Date.toString行:228 ... [snip]
这是代码:
CREATE OR REPLACE FUNCTION datejs (datein string)
RETURNS string
LANGUAGE JAVASCRIPT
AS '
{
var dateIn = DATEIN;
/**
* [Copyright info snipped]
*/
Date.CultureInfo={
name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",
dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],
firstLetterDayNames:["S","M","T","W","T","F","S"],
monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],
abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],
amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",
formatPatterns:{
shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",
fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",
universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",
monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},
regexPatterns:{
jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,
aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,
sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i, …Run Code Online (Sandbox Code Playgroud)