首页 > 解决方案 > U-SQL 错误 - 更改标识符以使用至少一个小写字母

问题描述

我对 U-SQL 相当陌生,并尝试在 Azure Data Lake Analytics 中运行 U-SQL 脚本,以使用 Parquet 提取器功能处理 Parquet 文件。我收到以下错误,但找不到解决方法。错误 - 更改标识符以使用至少一个小写字母。如果这不可能,则转义该标识符(例如:'[ACTIVITY]'),或将其嵌入到 CSHARP() 块中(例如 CSHARP(ACTIVITY))。

不幸的是,Parquet 文件中生成的所有不同字段都是大写的,我不想转义这些标识符。我尝试过是否可以用 CSHARP 块包装标识符并且它也失败了(E_CSC_USER_RESERVEDKEYWORDASIDENTIFIER:保留关键字 CSHARP 用作标识符。)无论如何我可以提取镶木地板文件吗?谢谢你的帮助!代码片段:

SET @@FeaturePreviews = "EnableParquetUdos:on";

@var1 = EXTRACT ACTIVITY 字符串、AUTHOR_NAME 字符串、AFFLIATION 字符串

FROM "adl://xxx.azuredatalakestore.net/Abstracts/FY2018_028"
USING Extractors.Parquet();

@var2 = SELECT * FROM @var1 ORDER BY ACTIVITY ASC FETCH 5 ROWS;
使用 Outputters.Csv() 将@var2 输出
到“adl://xxx.azuredatalakestore.net/Results/AbstractsResults.csv”;

标签: azureazure-data-lakeu-sql

解决方案


根据您的描述,您尝试说

EXTRACT ALLCAPSNAME int FROM "/data.parquet" USING Extractors.Parquet();

在 U-SQL 中,我们保留所有大写标识符,以便将来可以添加新关键字,而不会使旧脚本失效。

要解决此问题,您只需像在任何其他 SQL 方言中一样引用名称(转义它):

EXTRACT [ALLCAPSNAME] int FROM "/data.parquet" USING Extractors.Parquet();

请注意,这不会更改字段的名称。这只是解决该领域的语法方式。

另请注意,在大多数 SQL 社区中,始终引用标识符以避免保留关键字冲突被认为是最佳实践。

如果 Parquet 文件中的所有字段都是大写的,则必须将它们全部引用...明确引用它们时的列。


推荐阅读