在Snowflake中加入UDF

时间:2019-04-19 14:53:18

标签: user-defined-functions snowflake

创建一些UDF后,以下查询将起作用:

    SELECT
        rsp.id
    FROM TABLE(UDF_1('2019-04-18 12:00:00'::timestamp_ltz)) AS rsp

但是,此查询:

    SELECT
        rsp.id
    FROM TABLE(UDF_1('2019-04-18 12:00:00'::timestamp_ltz)) AS rsp
    JOIN TABLE(UDF_2('2019-04-18 12:00:00'::timestamp_ltz)) AS rasp ON 
        rsp.id = rasp.id AND
        rsp.timestamp = rasp.start;

给我:

SQL compilation error: error line 5 at position 8 invalid identifier 'RSP.ID'

如果第一个查询不起作用,我会理解的。但是,由于第一个查询有效起作用,为什么随后告诉我RSP.ID无效?

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案:

public dgvWordSets()
        {
            InitializeComponent();


            table = new DataTable ("Words");
            table.Columns.Add("English", typeof(string));
            table.Columns.Add("French", typeof(string));
            table.Columns.Add("Italian", typeof(string));
            table.Columns.Add("WordSets", typeof(string));


            table.Rows.Add("Hello", "Salut", "Salve", "Basic Phrases");
            table.Rows.Add("Good night", "Bonne nuit", "Buonanotte", "Basic Phrases");
            table.Rows.Add("Good evening", "Bonsoir", "Buonasera", "Basic Phrases");
            table.Rows.Add("Excuse me", "Excusez-moi", "Scusa", "Basic Phrases");
            table.Rows.Add("Please", "S'il vous plait", "Per favore", "Basic Phrases");
            table.Rows.Add("Dog", " Le chien", "Il cane", "Animals");
            table.Rows.Add("Cat", "Le chat", "Il gatto", "Animals");
            table.Rows.Add("Jacket", "Un veste", "La giacca", "Clothes");

            comboBox1.DataSource = table.DefaultView;
            comboBox1.DisplayMember = "WordSets";
}

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

                if (comboBox1.SelectedIndex > -1)
                {
                    DataRowView view = comboBox1.SelectedItem as DataRowView;
                    string WordSets = view["WordSets"].ToString();

                    DataRow[] rows = table.Select("WordSets = '" + WordSets + "'");
                    DataTable newTable = table.Clone();
                    foreach (DataRow row in rows)
                        newTable.ImportRow(row);
                    dataGridView1.DataSource = newTable.DefaultView;
                }

有效。我们推测 SELECT rsp.id FROM (SELECT * FROM TABLE(UDF_1('2019-04-18 12:00:00'::timestamp_ltz))) AS rsp JOIN (SELECT * FROM TABLE(UDF_2('2019-04-18 12:00:00'::timestamp_ltz))) AS rasp ON rsp.id = rasp.id AND rsp.timestamp = rasp.start; 发生在函数执行之前,因此JOINs上没有任何内容。

我确信,仅选择我要反对的行JOIN可以提高效率,但是上面的方法对我有用。