我使用雪花云数据仓库,就像托管数据的teradata.我可以在Web UI上运行查询并获得结果.但我不清楚如何将结果导出到本地PC,以便我们可以根据数据进行报告.
提前致谢
我有一个大的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 …
我想在现有表中添加一列,但不是在最后添加一列,在其他列之间雪花是否允许这样做
像这样的东西
更改表 MY_DB.MY_SCHEMA.MY_TABLE 在 MY_OLD_COLUMN1 之后添加列 MY_NEW_COLUMN NUMBER(38,0);
我正在尝试利用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) 我的数据框中有以下格式的数据:
>>> df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
>>> df
A B C D
0 0.578095 -1.985742 -0.269517 -0.180319
1 -0.618431 -0.937284 0.556290 -1.416877
2 1.695109 0.122219 0.182450 0.411448
3 0.228466 0.268943 -1.249488 3.227840
4 0.005990 -0.805618 -1.941092 -0.146649
5 -1.116451 -0.649854 1.272314 1.422760
Run Code Online (Sandbox Code Playgroud)
我想通过附加行数据和列名称来组合每行的一些列,创建以下输出:
A B New Column
0 0.578095 -1.985742 {"C":"-0.269517","D":"-0.180319"}
1 -0.618431 -0.937284 {"C":"0.556290","D":"-1.416877"}
2 1.695109 0.122219 {"C":"0.182450","D":"0.411448"}
3 0.228466 0.268943 {"C":"-1.249488","D":"3.227840"}
4 0.005990 -0.805618 {"C":"-1.941092","D":"-0.146649"}
5 -1.116451 -0.649854 {"C":"1.272314","D":"1.422760"}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在熊猫中实现这一目标?
最终游戏是获取 JSON 格式的数据,其中列 CD 被视为维度 AB 的度量,然后将它们存储到 Snowflake 的表中。
我有一个 type 列TIMESTAMP_NTZ,它包含我知道在 UTC 时区的时间戳。主要是我想转换为,TIMESTAMP_TZ因为我还有其他列,TIMESTAMP_TZ并且我希望能够执行涉及两者的操作。
我尝试TIMESTAMP_TZ通过以下方式生成:
SELECT
'2019-10-24 12:07:24.000'::timestamp_ntz as orig -- a literal timestamp_ntz
,convert_timezone('UTC', 'UTC', orig) -- the 3-args version of convert_timezone will always return a TIMESTAMP_NTZ
,convert_timezone('UTC', orig) -- the 2-args assumes that orig timezones is session's current timezone
;
Run Code Online (Sandbox Code Playgroud)
只是为了明确我想转换2019-10-24 12:07:24.000为2019-10-24 12:07:24.000 +0000
Snowflake 中是否有任何函数或运算符允许我将其视为TIMESTAMP_NTZX TIMESTAMP_TZ时区?
我正在尝试使用 python pandas 连接器连接到雪花。
我在 Windows 上使用 anaconda 发行版,但卸载了现有的连接器和 pyarrow,并使用此页面上的说明重新安装:https ://docs.snowflake.com/en/user-guide/python-connector-pandas.html
我有以下版本
熊猫 1.0.4 py37h47e9c7a_0
点 20.1.1 py37_1
pyarrow 0.17.1 pypi_0 pypi
蟒蛇 3.7.7 h81c818b_4
雪花连接器-python 2.2.7 pypi_0 pypi
运行本文档的步骤 2 时:https://docs.snowflake.com/en/user-guide/python-connector-install.html,我得到:4.21.2
尝试使用时fetch_pandas_all()出现错误:NotSupportedError: Unknown error
我使用的代码如下:
import snowflake.connector
import pandas as pd
SNOWFLAKE_DATA_SOURCE = '<DB>.<Schema>.<VIEW>'
query = '''
select *
from table(%s)
LIMIT 10;
'''
def create_snowflake_connection():
conn = snowflake.connector.connect(
user='MYUSERNAME',
account='MYACCOUNT',
authenticator = 'externalbrowser',
warehouse='<WH>',
database='<DB>',
role='<ROLE>',
schema='<SCHEMA>'
)
return conn
con = create_snowflake_connection() …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个与以下基于 T-SQL 的即席查询等效的 Snowflake。
**T-SQL version**
Declare @i int = 0;
If(@i = 0)
PRINT '0';
Else
Begin
PRINT '1'
RETURN;
PRINT '2'
End
**Snowflake version**
Set i = 0;
If($i = 0)
Select '0';
Else
Begin
Select '1'
RETURN;
Select '2'
End
Run Code Online (Sandbox Code Playgroud)
当我从 Snowflake Web UI 运行 Snowflake 查询时,出现错误:
SQL 编译错误:语法错误第 1 行位于位置 0 意外的“IF”
我搜索了雪花文档,但没有找到以下有用的文档:
任何帮助,将不胜感激。
谢谢。
在过去的八个月里,我和我的团队每天都在使用 Snowflake 来转换/丰富我们的数据(使用 DBT)并使其在其他工具中可用。虽然该平台似乎非常适合对大型数据集进行大量/长时间运行的查询以及支持 Metabase 和 Mode 等分析工具,但在我们需要运行非常小的查询的情况下,它似乎表现不佳(抓住我表 A 的一行)在高需求 API 背后,我的意思是,SF 有时在 XLARGE-2XLARGE 仓库上需要多达 100 毫秒甚至 300 毫秒的时间来获取相当小的表(200k 计算记录/聚合)中的一行,总计为当我们想要将其用作后端来支持高需求分析 API 时,网络延迟会导致设置非常糟糕。
我们已经使用 Nodejs + Fastify 以及 Python + Fastapi 测试了多个设置,使用连接池 (10-20-50-100)/不使用连接池(每个请求一个连接,根本不理想),部署在同一个 AWS 中区域作为我们的 SF 部署,但我们无法维持接近 50-100 个请求/秒和 1 秒的延迟(可接受),而是我们只能以高达 15-30 秒的延迟获得 10-20 个请求/秒. 这两种语言/框架各自表现良好,甚至只是获取/释放连接,实际上耗时最长且需要大量 IO 的是实际运行查询并等待响应。我们还没有尝试过 Golang 设置,但这一切似乎都归结为 Snowflake 为此类查询返回结果的速度。
我们真的很想使用 Snowflake 作为数据库来支持只读 REST API,该 API 预计每秒有 300 个请求,同时尝试将响应时间控制在 1 秒以内。(但也准备接受它只是不适合那个)
有人在类似的设置中使用 Snowflake 吗?在这种情况下,最能充分利用 Snowflake 的工具/配置是什么?我们是否应该启动许多服务器并希望我们能够达到一个不错的请求率?或者我们应该只是将转换后的数据复制到 Postgres 之类的东西上,以便能够获得更好的响应时间?
我正在尝试将 Pandas 数据帧中的数据插入 Snowflake 中的表中,但我无法弄清楚如何正确执行此操作。首先,我在 Snowflake 中创建了一个表,其中包含一些类型为 的列VARIANT。例如:
CREATE OR REPLACE TABLE
mydatabase.myschema.results(
DATE date,
PRODUCT string,
PRODUCT_DETAILS variant,
ANALYSIS_META variant,
PRICE float
)
Run Code Online (Sandbox Code Playgroud)
然后在 Pandas 中,我有一个像这样的数据框:
import pandas as pd
record = {'DATE': '2020-11-05',
'PRODUCT': 'blue_banana',
'PRODUCT_DETAILS': "{'is_blue': True, 'is_kiwi': nan}",
'ANALYSIS_META': "None",
'PRICE': 13.02}
df = pd.DataFrame(record, index=[0])
Run Code Online (Sandbox Code Playgroud)
如您所见,我已将列编码VARIANT为字符串,正如我从snowflake-connector文档中了解到的那样,SnowflakeVARIANT类型映射到strPandas 中的 dtype,反之亦然。
所以,到目前为止我所做的尝试如下:
from snowflake.connector import pandas_tools
pandas_tools.write_pandas(
conn=conn,
df=df,
table_name="results",
schema="myschema",
database="mydatabase")
Run Code Online (Sandbox Code Playgroud)
这确实有效,返回
(True,
1,
1,
[('czeau/file0.txt', …Run Code Online (Sandbox Code Playgroud)