繁体   English   中英

Azure Data Lake中的U-SQL查询错误

[英]U-SQL Query Error in Azure Data Lake

我在U-SQL查询中遇到错误:

E_CSC_USER_SYNTAXERROR: syntax error. Expected one of: '.' ALL ANTISEMIJOIN ANY AS BROADCASTLEFT BROADCASTRIGHT CROSS DISTINCT EXCEPT FULL FULLCROSS GROUP HASH HAVING INDEXLOOKUP INNER INTERSECT JOIN LEFT LOOP MERGE ON OPTION ORDER OUTER OUTER UNION PAIR PIVOT PRESORT PRODUCE READONLY REQUIRED RIGHT SAMPLE SEMIJOIN SERIAL SORTED TO UNIFORM UNION UNIVERSE UNPIVOT USING WHERE WITH ';' '(' ')' ','
Line 19
Component
CSC
Message
syntax error. Expected one of: '.' ALL ANTISEMIJOIN ANY AS BROADCASTLEFT BROADCASTRIGHT CROSS DISTINCT EXCEPT FULL FULLCROSS GROUP HASH HAVING INDEXLOOKUP INNER INTERSECT JOIN LEFT LOOP MERGE ON OPTION ORDER OUTER OUTER UNION PAIR PIVOT PRESORT PRODUCE READONLY REQUIRED RIGHT SAMPLE SEMIJOIN SERIAL SORTED TO UNIFORM UNION UNIVERSE UNPIVOT USING WHERE WITH ';' '(' ')' ','
Resolution
Correct the script syntax, using expected token(s) as a guide.
Description
Invalid syntax found in the script.
Details
at token 'string', line 19
near the ###:
**************

    Custom string,
    ttl int
    FROM @INPUT_FILE
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("$.[*]");

@jsonnodes =
    Partition  ### string, 
    SELECT JsonApp.JsonFunctions.JsonTuple(System).Values AS system_array,
    SELECT JsonApp.JsonFunctions.JsonTuple(Custom).Values AS custom_array,

这是我的u-sql查询:

@json =
    EXTRACT 
    Partition string, 
    System string,
    Custom string,
    ttl int
    FROM @INPUT_FILE
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("$.[*]");

@jsonnodes =
    Partition string, 
    SELECT JsonApp.JsonFunctions.JsonTuple(System).Values AS system_array,
    SELECT JsonApp.JsonFunctions.JsonTuple(Custom).Values AS custom_array,
    ttl
    FROM @json;

在提取@jsonnodes查询中的值时遇到错误。

另外,应该使用哪个json路径遍历JSON中的所有对象?

要更正西蒙的答案:

原始脚本使用无效的语法(在SELECT或EXTRACT之外的列名/类型对,然后在单个查询中包含多个SELECT子句):

@jsonnodes =
  Partition string, 
  SELECT JsonApp.JsonFunctions.JsonTuple(System).Values AS system_array,
  SELECT JsonApp.JsonFunctions.JsonTuple(Custom).Values AS custom_array,
  ttl
  FROM @json;

您可能只想选择已提取的列和各个表达式,因此将名称( 不带类型! )移到SELECT语句中,并且仅使用一个 SELECT子句,如下所示:

@jsonnodes =
SELECT 
    Partition, 
    JsonApp.JsonFunctions.JsonTuple(System).Values AS system_array,
    JsonApp.JsonFunctions.JsonTuple(Custom).Values AS custom_array,
    ttl
FROM @json;

像在SQL中一样,您只能在语句中使用一次SELECT,就像您对EXTRACT语句所做的那样,因此您的代码应如下所示:

@jsonnodes =
SELECT 
    Partition string, 
    JsonApp.JsonFunctions.JsonTuple(System).Values AS system_array,
    JsonApp.JsonFunctions.JsonTuple(Custom).Values AS custom_array,
    ttl
FROM @json;

在这里查看JSON路径示例时您会看到可以使用$ .. *路径获取所有对象,或者仅使用$ [*]来获取第一级对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM