尝试使用 Databricks 和 SQL 创建表并将数据加载到同一个表中

Posted

技术标签:

【中文标题】尝试使用 Databricks 和 SQL 创建表并将数据加载到同一个表中【英文标题】:Trying to create a table and load data into same table using Databricks and SQL 【发布时间】:2019-10-07 23:20:15 【问题描述】:

我在 Google 上搜索了一个使用 Databticks 和 Azure SQL Server 创建表并将数据加载到同一个表中的解决方案。我在网上找到了一些示例代码,看起来很简单,但显然某处存在问题。这是我的代码。

CREATE TABLE MyTable
USING org.apache.spark.sql.jdbc 
OPTIONS (
  url "jdbc:sqlserver://server_name_here.database.windows.net:1433;database = db_name_here",
  user "u_name",
  password "p_wd",
  dbtable "MyTable"
);

现在,这是我的错误。

SQL 语句中的错误:SQLServerException:无效的对象名称“MyTable”。

很遗憾,我的密码中有空格。这可能是问题所在,但我不这么认为。

基本上,我想让它递归地遍历文件夹和子文件夹中的文件,并从具有字符串模式的文件中加载数据,如“ABC *”,并将所有这些文件递归地加载到表中。此处的障碍是我还需要将文件名加载到字段中。因此,我想将许多文件中的数据加载到 4 个实际数据字段和 1 个捕获文件名的字段中。我可以区分不同数据集的唯一方法是使用文件名。这可能吗?或者,这是徒劳的练习吗?

【问题讨论】:

【参考方案1】:

我的建议是使用 Azure SQL Spark 库,文档中也提到过:

https://docs.databricks.com/spark/latest/data-sources/sql-databases-azure.html#connect-to-spark-using-this-library

“批量复制”是您想要用来获得良好性能的东西。只需将文件加载到 DataFrame 并将其批量复制到 Azure SQL

https://docs.databricks.com/data/data-sources/sql-databases-azure.html#bulk-copy-to-azure-sql-database-or-sql-server

要从子文件夹中读取文件,答案在这里:

How to import multiple csv files in a single load?

【讨论】:

我从 Spark 开始并切换到 SQL,只是因为我无法让 Spark 做我需要的事情。我会再看看那个选项。谢谢!!【参考方案2】:

我终于,终于,终于搞定了。

val myDFCsv = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/2019/01/01/client/ABC*.gz")

myDFCsv.show()
myDFCsv.count()

感谢您指出正确的方向 mauridb!

【讨论】:

我的荣幸 :) :) :)

以上是关于尝试使用 Databricks 和 SQL 创建表并将数据加载到同一个表中的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 python 公式的 Databricks 数据框创建一个新的计算字段写回 sql 表

如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表

Databricks 和 Spark 中的公用表表达式 (CTE)

使用python截断Databricks中的增量表

Spark SQL 合并查询

将 Azure Databricks 增量表迁移到 Azure Synapse SQL 池