如何使用pyspark将JSON插入snowflake变体列

0 投票
1 回答
50 浏览
提问于 2025-04-13 17:05

我有一些从API获取的JSON数据。下面是这些数据的一个示例:

{'Clients' : [{'id' : 123, 'name' : 'client ABC inc'},
{'id' : 456, 'name' : 'client XYZ inc'}]}

我想把这些数据完整地插入到一个Snowflake表的变体列中,使用的是pyspark数据框。我该怎么做呢?我需要知道如何定义结构和写入数据框的步骤。谢谢!

1 个回答

0

Pyspark 解决方案:

可以从 这里 找到相关信息。你可以创建一个表,并定义它的结构。然后就可以往里面插入数据。

#!/usr/bin/env python
import snowflake.connector
import json
 
# Sample JSON string
var = {
    "student": {
        "name": "John Smith",
        "age": 10
    }
}
 
# Connect to your Snowflake account
ctx = snowflake.connector.connect(
    account='xxx',
    user='xxx',
    password='xxx',
    database='xxx',
    schema='xxx'
    )
cs = ctx.cursor()
try:
    cs.execute("create or replace transient table test_json_load (scr variant)")
    cs.execute("insert into test_json_load (select PARSE_JSON('%s'))" % json.dumps(var))
finally:
    cs.close()
ctx.close()

SNOWPARK 解决方案:

你可以从你的 JSON 数据创建一个数据框,然后把它添加到已有的表中(下面的例子中叫做 json_example),使用 mode = 'append' 这个模式。如果表已经存在,它会把数据追加到表里;如果不存在,就会创建一个新表。在下面的例子中,credentials2 是一个 .py 文件,里面包含了所有的连接信息。

from snowflake.snowpark import Session
from credentials2 import connection_parameters

session = Session.builder.configs(connection_parameters).create()

df = session.create_dataframe([['{"Clients" : [{"id" : "123", "name" : "client ABC inc"},\
                                {"id" : "456", "name" : "client XYZ inc"}]}']], schema=["json_var"])
df.write.mode('append').save_as_table('json_example')

撰写回答