Snowflake JSON 外文动态转表格格式

Snowflake JSON with foreign language to tabular format dynamically

我通读了 snowflake 文档和网络,发现只有 https://whosebug.com/users/12756381/greg-pavlik which can be found here

解决了我的问题

这不适用于具有俄语属性名称和属性值的数据。可以为此进行哪些修改以适合我的情况? 这是一个例子:

    create or replace table target_json_table(
v variant
);

INSERT INTO target_json_table SELECT parse_json('{
  "at": {
    "cf": "NV"  
  },
  "pd": {
    "мо": "мо",
    "ä": "ä",
   "retailerName": "retailer",
    "productName":"product"
  }
}');

  call create_view_over_json('target_json_table', 'V', 'MY_VIEW');

错误:创建视图时遇到错误。 SQL 编译错误:位置 7 处的语法错误行 7 意外 'ä:'。位置 7 处的语法错误第 8 行出现意外的“мо”。

作为存储过程创建基础的原始 SQL 中存在错误。我已经更正了。您可以在 Github 页面上获取更新。更改的部分在这里:

sql = 
`
SELECT DISTINCT '"' || array_to_string(split(f.path, '.'), '"."') || '"'                                         AS path_nAme,       -- This generates paths with levels enclosed by double quotes (ex: "path"."to"."element").  It also strips any bracket-enclosed array element references (like "[0]")
                DECODE (substr(typeof(f.value),1,1),'A','ARRAY','B','BOOLEAN','I','FLOAT','D','FLOAT','STRING')  AS attribute_type,  -- This generates column datatypes of ARRAY, BOOLEAN, FLOAT, and STRING only
                '"' || array_to_string(split(f.path, '.'), '.') || '"'                                           AS alias_name       -- This generates column aliases based on the path
FROM
        @~TABLE_NAME~@,
        LATERAL FLATTEN(@~COL_NAME~@, RECURSIVE=>true) f
WHERE   TYPEOF(f.value) != 'OBJECT'
        AND NOT contains(f.path, '[')         -- This prevents traversal down into arrays
limit   ${ROW_SAMPLE_SIZE}
`;

以前 SQL 只是用下划线替换了 non-ASCII 个字符。更新后的 SQL 会将键名用双引号括起来以创建 non-ASCII 个键名。

确保这就是您希望它执行的操作。此外,键是嵌套的。我决定最好的处理方法是在视图中使用点符号创建列名,例如一个列名是 pd.ä。这将需要用双引号将列名括起来,例如:

select * from MY_VIEW where "pd.ä" = 'ä';

最后说明:您的存储过程的名称是 create_view_over_json,但是,在 Github 项目中名称是 create_view_over_variant。更新时,一定要调用正确的程序。