【问题标题】:How to generate Stackoverflow table markdown from Snowflake如何从雪花生成 Stackoverflow 表降价
【发布时间】:2022-07-13 07:13:59
【问题描述】:

Stackoverflow 支持table markdown。例如,要显示这样的表格:

N_NATIONKEY N_NAME N_REGIONKEY
0 ALGERIA 0
1 ARGENTINA 1
2 BRAZIL 1
3 CANADA 1
4 EGYPT 4

你可以这样写代码:

|N_NATIONKEY|N_NAME|N_REGIONKEY|
|---:|:---|---:|
|0|ALGERIA|0|
|1|ARGENTINA|1|
|2|BRAZIL|1|
|3|CANADA|1|
|4|EGYPT|4|

运行 Snowflake 查询时自动生成 Stackoverflow 表 markdown 会节省大量时间。

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    以下存储过程接受查询字符串或查询 ID(它将自动检测它是哪一个)并将表结果作为 Stackoverflow 表降价返回。它会自动将数字和日期向右对齐,字符串、数组和对象向左对齐,其他类型默认居中。它支持您可以传递给它的任何查询。如果 SQL 包含单引号,最好使用$$ 来终止传递给过程的字符串。您可以使用此脚本创建过程并对其进行测试:

    create or replace procedure STACKOVERFLOW_TABLE("queryOrQueryId" string)
    returns string
    language javascript
    execute as caller
    as
    $$
        var [rs, i, c, row, props] = [null, 0, 0, 0, {}];
        
        queryOrQueryId = queryOrQueryId.trim();
        
        if (isUUID(queryOrQueryId)){
            rs = snowflake.execute({sqlText:`select * from table(result_scan('${queryOrQueryId}'))`});
        } else {
            rs = snowflake.execute({sqlText:`${queryOrQueryId}`});
        }
        props.columnCount = rs.getColumnCount();
        for(i = 1; i <= props.columnCount; i++){
            props["col" + i + "Name"] = rs.getColumnName(i);
            props["col" + i + "Type"] = rs.getColumnType(i);
        }
        var table =  getHeader(props);
        while(rs.next()){
            row = "|";
            for(c = 1; c <= props.columnCount; c++){
                row += escapeMarkup(rs.getColumnValueAsString(c)) + "|";
            }
            table += "\n" + row;
        }
        return table;
    
    //------ End main function. Start of helper functions.
    
    function escapeMarkup(s){
        s = s.replace(/\\/g, "\\\\");
        s = s.replaceAll('|', '\\|');
        s = s.replace(/\s+/g, " ");
        return s;
    }
    function getHeader(props){
        s = "|";
        for (var i = 1; i <= props.columnCount; i++){
            s += props["col" + i + "Name"] + "|";
        }
        s += "\n";
        for (var i = 1; i <= props.columnCount; i++){
            
            switch(props["col" + i + "Type"]) {
                case 'number':
                    s += '|---:';
                    break;
                case 'string':
                    s += '|:---';
                    break;
                case 'date':
                    s += '|---:';
                    break;
                case 'json':
                    s += '|:---';
                    break;
                default:
                    s += '|:---:';
            }
        }
        return s + "|";
    }
    function isUUID(str){
        const regexExp = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/gi;
        return regexExp.test(str);
    }
    $$;
    
    -- Usage type 1, a simple query:
    call stackoverflow_table($$ select * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION limit 5 $$);
    
    -- Usage type 2, a query ID:
    select * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION limit 5;
    set quid = (select last_query_id());
    call stackoverflow_table($quid);
    

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多