Ee *_* Ng 3 pyspark snowflake-cloud-data-platform azure-databricks
df.write.format("net.snowflake.spark.snowflake").options(**sfOptions).option("dbtable", "table_name").mode("overwrite").save()
Run Code Online (Sandbox Code Playgroud)
我在 Azure Databricks 中使用上述代码将 Spark 表写入 Snowflake 数据库,仅花费了 7 分钟多的时间才完成 900 万多行。
我使用节点类型为 Standard_D64s_v3(256GB,64 核)的单节点集群,并安装了 Maven 包“net.snowflake:spark-snowflake_2.12:2.5.1-spark_2.4”。
为了达到全速,我是否缺少一些设置?
我建议检查是否sfOptions有选项"usestagingtable": "ON"。
\n\n通过连接器自动创建和管理的 Snowflake 内部阶段,可以促进两个系统之间的数据传输:
\n\n
\n- 连接到 Snowflake 并在 Snowflake 中初始化会话后,连接器将创建内部阶段。
\n- 在 Snowflake 会话的整个持续时间内,连接器使用该阶段来存储数据,同时将数据传输到目的地。
\n- 在 Snowflake 会话结束时,连接器会删除阶段,从而删除阶段中的所有临时数据。
\n请注意,对内部传输的支持需要特定版本(或更高版本)的连接器,具体取决于您的 Snowflake 帐户的云平台:
\n\n
\n- AWS 仅在连接器版本 2.2.0(及更高版本)中支持内部数据传输模式。
\n- Azure 仅连接器版本 2.4.0(及更高版本)支持内部数据传输模式。
\n- GCP 仅连接器版本 2.7.0(及更高版本)支持内部数据传输模式。
\n
\n\n使用临时表
\n该参数控制数据加载是否使用临时表。
\n临时表是由连接器创建的普通表(具有临时名称);如果数据加载操作成功,则删除原始目标表,并将临时表重命名为原始目标表\xe2\x80\x99s名称。如果数据加载操作失败,则暂存表将被删除,目标表将保留操作之前的数据。因此,如果操作失败,临时表允许保留原始目标表数据。为了安全起见,Snowflake 强烈建议在大多数情况下使用临时表。
\n为了让连接器创建临时表,通过 Spark 连接器执行 COPY 的用户必须具有足够的权限来创建表。如果用户没有创建表的权限,则直接加载(即不使用临时表进行加载)非常有用。
\n