外部表的安全顺序

目标:

我正在寻找一种稳定且便宜的方法来在大型外部表中查找特定行,尤其是对于使用snowflake而言,在该表中只能读取而不是修改外部文件(按原样存储)。

实际示例:

用于保存历史记录的大型XML归档文件。 XML是高度可变的,并且通常大于LOB大小。一种解决方案是使用外部表,该表允许更大的字段内容。

但这会带来另一个问题。

如何能有效地找到全部内容,以便对特定记录进行附加的xml解析,而又不必再次完全解析整个外部文件?

  • 对于复制的表,可以同时使用元数据和文件名以及元数据和行号。
  • 对于外部表,仅元数据和文件名可用。

在SQL术语中,我试图将实例化视图返回到外部表,以便进行其他处理。

我已经查看了外部表的序列,但是这些似乎是不稳定的。一种替代方法是重新解析文件并加入其中包含的ID,但这听起来像是一种昂贵的解决方法。

代码:

CREATE OR REPLACE sequence raw_messages_external_seq;

CREATE OR REPLACE EXTERNAL TABLE raw_messages_external
WITH LOCATION = @messagestore
PATTERN = '100M Gzip/.*.gz'
FILE_FORMAT = (TYPE=XML STRIP_OUTER_ELEMENT=TRUE);

CREATE OR REPLACE VIEW MESSAGES_VIEW
AS
SELECT 
    -- find original UUID
    value:"@" as message_type,get(split(message_type,':'),0) as type,regexp_substr(type,'\\D+') as type_group,case when type = 'rsm' 
    then get(XMLGET(XMLGET(value,concat(type,':HeaderDocument'),0),':Identification'),0 ),'$')
    else get(XMLGET(XMLGET(value,':HeaderMessage'),':MessageId'),'$')
    end as XML_ID,-- Lookup
    metadata$filename as filename,--metadata$file_row_number as row_id,--raw_messages_external_seq.nextval,row_number() over (partition by filenumber order by value) as file_row_number,value as XML_content
FROM raw_messages_external 

CREATE OR REPLACE MATERIALIZED VIEW MESSAGES_VIEW_STABLE
AS
SELECT 
    -- find original UUID
    value:"@" as message_type,-- for lookup
    metadata$filename as filename,row_number() over (partition by filenumber order by value) as file_row_number
FROM raw_messages_external 
center1370 回答:外部表的安全顺序

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2490540.html

大家都在问