简体   繁体   English

Azure Stream 分析 - SQL

[英]Azure Stream Analytics - SQL

.json is Input to Azure Stream Analytics. .json是 Azure Stream 分析的输入。 One of the column ( body ) is in BASE64 format.其中一列( body )采用 BASE64 格式。 I can covert this in SQL Server Management Studio with following query.我可以通过以下查询在 SQL Server Management Studio 中隐藏这一点。

declare @v varchar(1000) = 'cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA=='
    SELECT 
    CAST(
        CAST('' AS XML).value('xs:base64Binary(sql:column("BASE64_COLUMN"))', 'VARBINARY(MAX)')
        AS VARCHAR(MAX)
    )   AS Result
    FROM
    (
        SELECT @v AS BASE64_COLUMN
    ) A

But when trying to execute in Stream Analytics Query is warning with Error saying:但是,当尝试在 Stream 中执行时,分析查询会发出警告并显示错误:

Function 'value' is either not supported or not usable in this context. User defined function calls must start with "udf."

Query:询问:

SELECT 
    CAST(
        CAST('' AS XML).value('xs:base64Binary(sql:column("BASE64_COLUMN"))', 'VARBINARY(MAX)')
        AS VARCHAR(MAX)
    )   AS Result
    INTO
    [IOTPowerBIStreaming]
    FROM
    (
        SELECT body AS BASE64_COLUMN  FROM  [IOTInput]
    ) A

Function 'value' is either not supported or not usable in this context. Function 'value' 在此上下文中不受支持或不可用。 User defined function calls must start with "udf."用户定义的 function 调用必须以“udf”开头。

This error message indicates that the ASA runtime mistakenly assumes that you want to execute user defined function in ASA SQL.The syntax is udf.XXX() .此错误消息表明 ASA 运行时错误地假定您要在 ASA SQL 中执行用户定义的 function 。语法为udf.XXX()

ASA SQL still has many different behaviors from normal SQL, actually.The base64 convert method in your question is not supported in ASA SQL. ASA SQL still has many different behaviors from normal SQL, actually.The base64 convert method in your question is not supported in ASA SQL.

You could define user defined function is ASA so that you could implement same requirement.For example, please refer to below part from this document .您可以定义用户定义的 function 是 ASA,以便您可以实现相同的要求。例如,请参阅本文档的以下部分。

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},
decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/++[++^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},
_utf8_encode:function(e){e=e.replace(/\r\n/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},
_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}};
var encodedString = Base64.encode(input);
return encodedString;

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

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