【问题标题】:Best data format to load into snowflake table from MySQL (JSON or XML for a column)从 MySQL 加载到雪花表的最佳数据格式(列的 JSON 或 XML)
【发布时间】:2021-07-17 02:12:28
【问题描述】:

我需要迁移 Aurora MySQL 表,该表有 30 亿行和 7TB 存储。 我是 Snowflake 的新手,所以需要一些关于文件格式的建议。

数据类型很简单,除了两列longtext并在MySQL表中存储xml数据。 这是我的 MySQL 表结构

CREATE TABLE `app_event` (
`ID` varchar(255) NOT NULL,
`DETAILS` longtext,
`OBJECT` varchar(255) NOT NULL,
`DATE_TIME` datetime(6) DEFAULT NULL,
`SUMMARY` varchar(4000) DEFAULT NULL
);

DETAILS 列和SUMMARY 列存储现在的xml 文件。 一个样本行是

6tgbcr45345o82mcrzz,<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CasePayload><caseId>5f5475-21cf-4c7e-8071-574a1ef78981</caseId><providerTypes>WATCHLIST</providerTypes> ,9/16/2020 9:45,<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CaseEventSummary><providerTypes>WATCHLIST</providerTypes>

这只是一个示例数据,在移动时我们需要将 xml 转换为 json 并存储到 Snowflake 表中。

我们正在考虑为此使用 Kinesis,但当 Kinesis 将数据传递到 s3 时,它会转换为 json。

那么问题是加载到 Snowflake 的最佳数据格式是什么? 我们应该转换为 CSV 并即时将 xml 转换为 json 并存储到 CSV 或 json 中好吗? 像这样

{
      "ID":"6tgbcr45345o82mcrzz",
      "DETAILS":{
         "CasePayload":{
            "caseId":"5f5475-21cf-4c7e-8071-574a1ef78981",
            "providerTypes":"WATCHLIST"
         }
      },
      "OBJECT":"TEST",
      "DATE_TIME":"9/16/2020 9:45",
      "SUMMARY":{
         "screenCaseEventSummary":{
            "providerTypes":"WATCHLIST"
         }
      }
   }

在 Select 方面哪个好? 我需要查询 json 的元素,这是将 xml 转换为 json 的主要原因之一,但要保留我们想要存储列的所有列。

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    Snowflake 理解 JSON 和 XML,您可以同时使用两者。

    如果必须选择,我会选择 JSON - 因为 XML 支持仍处于预览阶段 (https://docs.snowflake.com/en/sql-reference/functions/xmlget.html)。

    我还会考虑您当前如何查询 XML 字符串,以防您希望尽量减少翻译查询的工作量(在这种情况下,我会继续使用 XML 对象)。

    【讨论】:

    • 是 JSON 在选择透视图中更好还是列结构更好。我需要快速选择以便存储哪个更好
    • JSON 非常适合不断发展的模式 - 当您拥有明确定义的模式时,列结构会更好,并且可以更轻松地编写查询
    【解决方案2】:

    Felipe 的更多观点。如果可以使用 JSON,请确保压缩文件。

    对于这两种情况,FLATTEN 将是您解环数组的最佳朋友。但是 JSON 的语法是这样的

    json_column:Object_Name:Sub_Obj_Name::int
    

    也可以通过

    json_get(json_column, 'Object_Name.Sub_Obj_Name')
    

    但前者看起来好多了,而 XML 是狗早餐(恕我直言)

    get(xmlget(xmlget(xmlget(xml,'header',0), 'companyinfo', 0), 'companyid'),'$') as companyid
    

    看到这个XML answer和这个JSON answer

    【讨论】:

    • 但是如果我们使用 JSON 会在大表中选择我们比普通的列结构慢吗? JSON也支持搜索优化。插入很好,但在选择视图中哪个更好用?
    • @SUDARSHAN 我假设您问的是如何最好地将半结构化数据从外部源移动到雪花,在这种情况下,我仍然认为 JSON 更容易的建议仍然成立。我们有 TB 的“原始”JSON,这是我们获取数据的方式,但是我们将每天使用的数据转换/额外转换为结构化表格,这些表格被结构化以执行我们所做的工作。 JSON 被用于那些临时问题,我们改变了我们额外数据的方式,因为我们在主表中找到了我们想要的。但是 JSON 与 XML 相比,XML 处理起来很糟糕。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2021-09-01
    • 2020-10-25
    相关资源
    最近更新 更多