如何从雪花表中删除重复记录?
ID Name
1 Apple
1 Apple
2 Apple
3 Orange
3 Orange
Run Code Online (Sandbox Code Playgroud)
结果应该是:
ID Name
1 Apple
2 Apple
3 Orange
Run Code Online (Sandbox Code Playgroud) 我花了半天时间试图自己解决这个问题,但现在我已经没有想法和谷歌搜索请求了。所以基本上我想要的是使用 package.json 连接到我们的 Snowflake 数据库snowflake-connector-python。我能够很好地安装该软件包(以及自动安装的所有相关软件包),我当前的pip3 list结果是:
Package Version
-------------------------- ---------
asn1crypto 1.3.0
azure-common 1.1.25
azure-core 1.6.0
azure-storage-blob 12.3.2
boto3 1.13.26
botocore 1.16.26
certifi 2020.6.20
cffi 1.14.0
chardet 3.0.4
cryptography 2.9.2
docutils 0.15.2
gitdb 4.0.5
GitPython 3.1.3
idna 2.9
isodate 0.6.0
jmespath 0.10.0
msrest 0.6.17
oauthlib 3.1.0
oscrypto 1.2.0
pip 20.1.1
pyasn1 0.2.3
pyasn1-modules 0.0.9
pycparser 2.20
pycryptodomex 3.9.8
PyJWT 1.7.1
pyOpenSSL 19.1.0
python-dateutil 2.8.1
pytz 2020.1
requests 2.23.0
requests-oauthlib 1.3.0
s3transfer 0.3.3
setuptools 47.3.1
six 1.15.0 …Run Code Online (Sandbox Code Playgroud) LATERAL FLATTEN(...)Snowflake 中和 的使用有什么区别TABLE(FLATTEN(...))?FLATTEN我检查了,LATERAL和的文档,TABLE无法明确以下查询之间的功能差异。
select
id as account_id,
account_regions.value::string as region
from
salesforce.accounts,
lateral flatten(split(salesforce.accounts.regions, ', ')) account_regions
Run Code Online (Sandbox Code Playgroud)
select
id as account_id,
account_regions.value::string as region
from
salesforce.accounts,
table(flatten(split(salesforce.accounts.regions, ', '))) account_regions
Run Code Online (Sandbox Code Playgroud) 我能够通过 R 成功连接到 Snowflake 数据库,但在获取数据时遇到问题,因为没有选择活动仓库。以下是错误消息:
当前会话中未选择活动仓库。使用“使用仓库”命令选择活动仓库。
这是我正在使用的代码。
con <- DBI::dbConnect(
odbc::odbc(),
UID = user,
PWD = pass,
Server = host,
Warehouse = 'YOUR_WAREHOUSE_NAME',
Driver = "SnowflakeDSIIDriver",
Role = role,
Database = database,
Autthenticator = "external browser"
)
dbGetQuery(con, "SELECT * FROM MY_TABLE LIMIT 100")
Run Code Online (Sandbox Code Playgroud)
我已将我的连接和查询基于RStudio 社区上的该线程,但我没有任何运气。我还尝试在查询中使用“使用仓库 MY_WAREHOUSE”命令,但没有任何运气。
注意:我可以成功连接并通过 Python 查询数据,所以我认为这是 R 特定的问题。
我有一个名为“df”的 pandas 数据框,它是根据 Netezza 数据库的 SQL 查询结果创建的。我正在 Jupyter 笔记本上工作。数据框有两行,其中两列(CREATEDDATE 和 STAGEDATE)包含日期时间值。当我运行 print(df) 时,结果如下所示:
ID ISDELETED PARENTID CREATEDBYID \
0 017o000003tQRftAAG false a0no000000Hrv1IAAR 005o0000001w8wgAAA
1 017o000003jl52cAAA false a0no000000GszDUAAZ 005o0000001w2pTAAQ
CREATEDDATE FIELD OLDVALUE NEWVALUE STAGEDATE
0 2015-07-30 14:51:41 created None None 2016-06-06
1 2015-07-16 14:48:37 created None None 2016-06-06
Run Code Online (Sandbox Code Playgroud)
如果我运行 print(df.dtypes),结果是这样的:
ID object
ISDELETED object
PARENTID object
CREATEDBYID object
CREATEDDATE datetime64[ns]
FIELD object
OLDVALUE object
NEWVALUE object
STAGEDATE datetime64[ns]
dtype: object
Run Code Online (Sandbox Code Playgroud)
因此,据我所知,我的日期时间列的格式正确,可以使用 write_pandas() 写入 Snowflake。然而,在我这样做之后,雪花中的日期有很大不同:

例如,2016-06-06 的 STAGEDATE 值现在为 48399-06-06。有谁知道如何解决这一问题?我正在使用 pyodbc 从 …
我已经安装了所有必要的软件包:
pip install --upgrade snowflake-sqlalchemy
Run Code Online (Sandbox Code Playgroud)
我正在从雪花文档中运行这个测试代码:
from sqlalchemy import create_engine
engine = create_engine(
'snowflake://{user}:{password}@{account}/'.format(
user='<your_user_login_name>',
password='<your_password>',
account='<your_account_name>',
)
)
try:
connection = engine.connect()
results = connection.execute('select current_version()').fetchone()
print(results[0])
finally:
connection.close()
engine.dispose()
Run Code Online (Sandbox Code Playgroud)
我的输出应该是雪花版本,例如 1.48.0
但我收到错误:NoSuchModuleError:无法加载插件:sqlalchemy.dialects:snowflake
(我正在尝试在 Anaconda 中运行它)
我正在工作中的 SageMaker 实例上处理笔记本。我的目标是将我的jupyter笔记本连接到雪花数据库以查询一些数据。以下是有关我的问题的一些详细信息;
(practiceenv) sh-4.2$ python --version
Python 3.8.6
Run Code Online (Sandbox Code Playgroud)
在相同的环境下,我确实运行了命令;
conda list
Run Code Online (Sandbox Code Playgroud)
我可以看到包裹;
# Name Version Build Channel
snowflake-connector-python 2.3.10 py38h51da96c_0 conda-forge
Run Code Online (Sandbox Code Playgroud)
所以看起来正确的包就在那里。接下来,我在相同的环境中创建了一个jupyter笔记本(condapython3内核)并尝试导入包
import snowflake.connector
ModuleNotFoundError: No module named 'snowflake
Run Code Online (Sandbox Code Playgroud)
我有一个类似于客户 ID 和商品购买日期的数据表,如下所示。作为过滤器,我希望返回客户 ID,前提是给定的客户 ID 在过去 30 个滚动天内至少进行了 1 次购买。
这是可以用一个简单的WHERE子句来完成的事情吗?就我的目的而言,该数据表有许多记录,其中一个客户 ID 可能有数百笔交易
Customer ID Item Date Purchased
233 2021-05-27
111 2021-05-27
111 2021-05-21
23 2021-05-12
412 2021-03-11
111 2021-03-03
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Customer ID
233
111
23
Run Code Online (Sandbox Code Playgroud)
最初考虑使用 CTE 来初步过滤掉过去 30 天内没有至少购买过 1 件商品的所有用户。尝试了以下两个不同的 where 语句,但都无法返回错误的日期时间范围。
SELECT *
FROM data d
WHERE 30 <= datediff(days, d.ITEM_PURCHASE_DATE, current_date) X
WHERE t.DATE_CREATED <= current_date + interval '30 days' X
Run Code Online (Sandbox Code Playgroud) 在DataGrip中,如何将参数传递给SQL查询?假设我有一个查询:
select * from table where date >= ?
Run Code Online (Sandbox Code Playgroud)
那么这里如何绑定变量呢?当我打开参数窗格时,即单击P此处的按钮。
我懂了
没有参数存在
或者:
我应该在哪里设置参数值?
我计划每 15 分钟运行一次任务:
CREATE OR REPLACE TASK mytask
WAREHOUSE = 'SHARED_WH_MEDIUM'
SCHEDULE = '15 MINUTE'
STATEMENT_TIMEOUT_IN_SECONDS = 3600,
QUERY_TAG = 'KLIPFOLIO'
AS
CREATE OR REPLACE TABLE mytable AS
SELECT * from xxx;
;
alter task mytask resume;
Run Code Online (Sandbox Code Playgroud)
我从输出中看到task_history()任务是SCHEDULED:
select * from table(aftonbladet.information_schema.task_history(task_name => 'MYTASK')) order by scheduled_time;
QUERY_ID NAME DATABASE_NAME SCHEMA_NAME QUERY_TEXT CONDITION_TEXT STATE ERROR_CODE ERROR_MESSAGE SCHEDULED_TIME COMPLETED_TIME RETURN_VALUE
*** MYTASK *** *** *** SCHEDULED 2020-01-21 09:58:12.434 +0100
Run Code Online (Sandbox Code Playgroud)
但我希望它立即运行而不等待 SCHEDULED_TIME,有什么方法可以实现这一点吗?
snowflake-cloud-data-platform ×10
python ×4
sql ×2
datagrip ×1
datetime ×1
flatten ×1
lateral-join ×1
pandas ×1
python-3.x ×1
r ×1
sqlalchemy ×1