【发布时间】:2021-12-02 00:42:51
【问题描述】:
我正在尝试读取突触表,其中列名中有空格。
读取表一直在工作,直到我选择没有空格或特殊字符的列:
%%spark
val df = spark.read.synapsesql("<Pool>.<schema>.<table>").select("TYPE", "Year").limit(100)
df.show()
输出:
+------+----+
| TYPE|Year|
+------+----+
|BOUGHT|LAST|
|BOUGHT|LAST|
|BOUGHT|LAST|
|BOUGHT|LAST|
当我开始选择带有空格的列时,我遇到了错误。我尝试了很多变种:
.select(col("""`Country Code`"""))
.select(col("`Country Code`"))
.select(col("""[Country Code]"""))
.select(col("Country Code"))
.select($"`Country Code`")
.select("`Country Code`")
.select("""`Country Code`""")
将返回此错误: 错误:com.microsoft.sqlserver.jdbc.SQLServerException:列名“国家/地区”无效。
如果我在选择中省略 `,例如:
.select("[Country Code]")
错误:com.microsoft.sqlserver.jdbc.SQLServerException:列名“[国家代码]”无效。
在突触中使用反引号火花只需将第一个单词作为列。
有什么经验吗?
【问题讨论】:
-
你试过 df.printSchema() [没有 select 子句] 来查看 Spark 显示的列名吗?
-
是的,我已经在检查空间是否真的是空间(并且空间是常规字符(32))。我在 MSSQL 工作室有连接,所以我可以看到所有表的详细信息。这个专栏就在那里。您有机会在您的 sybase 环境中尝试一下吗?
-
我通过在原始选择中使用 `` 使其工作:.select("Id", "
Country Code") -
这个我也试过了 :-/.
-
不怀疑你,但评论没有正确呈现 - 国家代码周围的双引号内应该有反引号。
标签: scala apache-spark azure-synapse