Spark-SQL 是否支持使用正则表达式规范的 Hive Select All Query with except Columns

che*_*der 3 regex hive apache-spark apache-spark-sql pyspark

我正在尝试使用 pyspark 包装器使用 SPARK-SQL实现此功能。我遇到了这个错误

    pyspark.sql.utils.AnalysisException: u"cannot resolve '```(qtr)?+.+```' 
    given input columns:
Run Code Online (Sandbox Code Playgroud)

这是我的查询..基本上试图排除列“qtr”。

select `(qtr)?+.+` from project.table; 
Run Code Online (Sandbox Code Playgroud)

使用以下属性在 hive/beeline 中完美运行

set hive.support.quoted.identifiers=none;
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏?

Bhi*_*eni 7

Spark 允许 RegEx 作为SELECT表达式中的列名。默认情况下,此行为被禁用。要启用它,我们需要true在使用 RegEx 列运行查询之前将以下属性设置为。

spark.sql("SET spark.sql.parser.quotedRegexColumnNames=true").show(false) 
Run Code Online (Sandbox Code Playgroud)

设置此属性后,我们可以使用正则表达式选择表达式,如下所示。

spark.sql("SELECT `(.*time.*)+.+` FROM test.orders limit 2""").show(false)
Run Code Online (Sandbox Code Playgroud)

注意:这里允许任何 java 有效的 RegEx。我已经在 Spark 2.3 中测试了这个解决方案