我对 U-SQL 相当陌生,并尝试在 Azure Data Lake Analytics 中运行 U-SQL 脚本,以使用 Parquet 提取器功能处理 Parquet 文件。我收到以下错误,但找不到解决该错误的方法。 错误 - 更改标识符以使用至少一个小写字母。如果不可能,则转义该标识符(例如:“[ACTIVITY]”),或将其嵌入到 CSHARP() block 中(例如 CSHARP(ACTIVITY))。
不幸的是,Parquet 文件中生成的所有不同字段都是大写的,我不想转义这些标识符。我尝试过是否可以用 CSHARP block 包装标识符,但它也失败(E_CSC_USER_RESERVEDKEYWORDASIDENTIFIER:保留关键字 CSHARP 用作标识符。)我是否可以提取 Parquet 文件?感谢您的帮助! 代码片段:
SET @@FeaturePreviews = "EnableParquetUdos:on";
@var1 = 提取事件字符串, AUTHOR_NAME 字符串, 隶属关系字符串
FROM "adl://xxx.azuredatalakestore.net/Abstracts/FY2018_028"
USING Extractors.Parquet();
@var2 =
选择 *
来自@var1
按事件 ASC 排序
获取 5 行;
输出@var2
至“adl://xxx.azuredatalakestore.net/Results/AbstractsResults.csv”
使用 Outputters.Csv();
最佳答案
根据您的描述,您想说的是
EXTRACT ALLCAPSNAME int FROM "/data.parquet" USING Extractors.Parquet();
在 U-SQL 中,我们保留所有大写标识符,以便将来可以添加新关键字,而不会导致旧脚本失效。
要解决此问题,您只需像在任何其他 SQL 方言中一样引用名称(转义它)即可:
EXTRACT [ALLCAPSNAME] int FROM "/data.parquet" USING Extractors.Parquet();
请注意,这不会更改字段的名称。这只是处理该字段的语法方式。
另请注意,在大多数 SQL 社区中,始终引用标识符以避免保留关键字冲突被认为是最佳实践。
如果 Parquet 文件中的所有字段都是大写,您将必须全部引用它们...在将来的更新中,您将能够对 Parquet(和 Orc)文件说 EXTRACT * FROM ...,但您仍然会当您明确引用这些列时,需要引用它们。
关于azure - U-SQL 错误 - 更改标识符以使用至少一个小写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090984/