【问题标题】:How to parse HTML with a Snowflake UDF如何使用雪花 UDF 解析 HTML
【发布时间】:2021-09-02 19:55:48
【问题描述】:

Snowflake 支持 JavaScript UDF,但 DOM 解析器不起作用(出于安全原因)。

例如,我使用 JS UDF 得到这些错误:

JavaScript execution error: Uncaught ReferenceError: document is not defined

JavaScript execution error: Uncaught ReferenceError: DOMParser is not defined

etc

那我怎样才能用 Snowflake 解析 HTML 文档呢?

【问题讨论】:

    标签: javascript java html snowflake-cloud-data-platform user-defined-functions


    【解决方案1】:

    您可以使用 Java UDF 和 jsoup 在 SQL 中解析 HTML。

    第一个 PUT jsoup.jar 使用 SnowSQL:

    put 'file:///Users/fhoffa/Downloads/jsoup-1.13.1.jar' @~;

    然后你可以为它创建一个Java UDF。

    例如,从 HTML 中提取文本:

    create or replace function jsoup_text(x string)
    returns string
    language java
    imports = ('@~/jsoup-1.13.1.jar')
    handler='MyClass.text'
    as
    $$
    import org.jsoup.Jsoup;
    
    class MyClass {
        public static String text(String x) {
            return Jsoup.parse(x).text();
        }
    }
    $$;
    

    可以这样调用:

    select jsoup_text('This is a <strong>strong</strong> number <date>2013</date>');
    

    返回没有任何 HTML 额外元素的文本。

    或从文档中提取所有链接 URL:

    create or replace function jsoup_all_links(x string)
    returns array
    language java
    imports = ('@~/jsoup-1.13.1.jar')
    handler='MyClass.extractLinks'
    as
    $$
    import org.jsoup.Jsoup;
    
    class MyClass {
        public static String[] extractLinks(String x) {
            return Jsoup.parse(x)
                .select("a[href]")
                .stream().map(s -> s.attr("abs:href"))
                .toArray(String[]::new);
        }
    }
    $$;
    

    它已经准备好工作了:

    select jsoup_all_links('The best <a href="http://snowflake.com">Snowflake</a> <a href="https://reddit.com/r/snowflake">subreddit</a>');
    

    返回数组["http://snowflake.com", "https://reddit.com/r/snowflake"]

    阅读更多:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-08
      • 2020-04-09
      • 2020-07-29
      • 2021-04-11
      • 2022-07-04
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多