我想在现有表中添加一列,但不是在最后添加一列,在其他列之间雪花是否允许这样做
像这样的东西
更改表 MY_DB.MY_SCHEMA.MY_TABLE 在 MY_OLD_COLUMN1 之后添加列 MY_NEW_COLUMN NUMBER(38,0);
我的数据框中有以下格式的数据:
>>> 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) 这是我的值表
id category
A Apple
A NULL
A Apple
B NULL
B Pear
B Pear
B Peach
B NULL
B NULL
C NULL
C NULL
C Apple
Run Code Online (Sandbox Code Playgroud)
这就是我想要的桌子
id category
A Apple
A Apple
A Apple
B NULL
B Pear
B Pear
B Peach
B Peach
B Peach
C NULL
C NULL
C Apple
Run Code Online (Sandbox Code Playgroud)
这些是我想要应用的规则;
我们可以想象有第三列称为日期,这就是数据排序的依据
我尝试使用first_value(),但类别列为空
我在 Snowflake 实例上使用 SQL
这段代码在 SSMS 中完美运行,但在 Snowflake 中则不然。关于如何修复它有什么建议吗?
set (start_date) = ('2017-07-01');
set (end_date) = ('2022-06-30');
with get_all_dates as (
select
$start_date as DateValue
, 1 as level
union all
select
DATEADD(DAY,1,DateValue)
, level + 1
from
get_all_dates
where
Datevalue < $end_date
)
select * from get_all_dates;
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误消息:
SQL 编译错误:递归 CTE“GET_ALL_DATES”中“DATEVALUE”列的锚点和递归术语之间的类型不匹配
预期输出:
2017-07-01
2017-07-02
...
2022-06-29
2022-06-30
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个执行 MERGE 语句的 Snowflake 任务。
\n但是,Snowflake 似乎无法识别 \xe2\x80\x9c(当与 target\xe2\x80\x9d 不匹配时)或 \xe2\x80\x9c(当与 source\xe2\x80\x9d 语句不匹配时)。
\ncreate or replace task MERGE_TEAM_TOUCHPOINT\n warehouse = COMPUTE_WH\n schedule = '1 minute'\n when system$stream_has_data('TEAMTOUCHPOINT_CDC')\nas\nmerge into dv.Team_Touchpoint as f using TeamTouchpoint_CDC as s\n on s.uniqueid = f.uniqueid\n when matched then \n update set TEAMUNIQUEID = s.TEAMUNIQUEID,\n TOUCHPOINTUNIQUEID = s.TOUCHPOINTUNIQUEID\n when not matched by target then \n insert (\n ID,\n UniqueID,\n TEAMUNIQUEID,\n TOUCHPOINTUNIQUEID \n )\n values (\n s.ID,\n s.UniqueID,\n s.TEAMUNIQUEID,\n s.TOUCHPOINTUNIQUEID\n )\n when not matched by source …Run Code Online (Sandbox Code Playgroud) snowflake-cloud-data-platform ×10
sql ×3
pandas ×2
python ×2
dataframe ×1
if-statement ×1
json ×1
return ×1