Azure 数据工厂将十六进制转换为字符串

Azure Data Factory convert Hex to string

我正在尝试将十六进制转换为数据工厂中的可读字符串。

注意:在这种情况下我不应该使用数据流。

Input file:

    col_a
    ------
    0x737461636b6f766572666c6f77

    
 Output:
    
    After converting I need to capture this value in a variable:
    
        ?Whosebug

解释:0x737461636b6f766572666c6f77 HEX的值转换后等于?Whosebug字符串

目前,Unhex 转换函数在管道级别不可用,无法将十六进制值转换为字符串。

您可以在数据流中使用派生列转换,也可以调用 Azure 函数来转换值。

Azure 数据工厂 (ADF) built-in expressions and functions 目前不支持从十六进制到字符串的转换(很高兴得到更正),但您有几个选择:

  1. 如果您附近有一些 SQL 计算(Azure SQL 数据库、Azure Synapse Analytics、托管实例等),您可以通过 Lookup activity, 例如

    SELECT CAST( 0x737461636b6f766572666c6f77 AS VARCHAR(100) );
    

您可以将此语句构造为如下表达式:

@concat('SELECT CAST( ', variables('varInput'),' AS VARCHAR(100) );')

一个工作示例:

  1. 您也可以使用笔记本,例如 Databricks 或 Synapse Notebook。这是 Scala 中的一个简单示例:

注意我确实使用基于纯 ADF 表达式的技术实现了它,一个 For Each activity,附加变量和这个 但是 运行 花了 30 秒我觉得很可怕。我还得到了一个使用 built-in 函数 decodeUriComponent 的方法,因为 @decodeUriComponent('%6b') 是 'k' 且具有相似的 运行 次。您仍然必须按顺序以两个字符的块循环遍历字符串,这需要很长时间。我还寻找了一个外部 public REST API(您可以通过 Web activity 调用)进行了此转换但找不到。