Creare un Python scalare UDF - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creare un Python scalare UDF

Un Python scalare UDF incorpora un programma Python che viene eseguito quando viene chiamata la funzione e restituisce un singolo valore. Il comando CREATE FUNCTION definisce i parametri seguenti:

  • Argomenti di input (facoltativi). Ogni argomento deve avere un nome e un tipo di dati.

  • Un tipo di dati restituito.

  • Un programma Python eseguibile.

I tipi di dati di input e di ritorno possono essere SMALLINTINTEGER,,BIGINT,DECIMAL,REAL, DOUBLEPRECISION, BOOLEANCHAR, VARCHAR o. DATE TIMESTAMP Inoltre, Python UDFs può utilizzare il tipo di datiANYELEMENT, che Amazon Redshift converte automaticamente in un tipo di dati standard in base agli argomenti forniti in fase di esecuzione. Per ulteriori informazioni, consulta ANYELEMENTtipo di dati

Quando una query Amazon Redshift chiama uno scalareUDF, in fase di esecuzione vengono eseguiti i seguenti passaggi:

  1. La funzione converte gli argomenti di input in tipi di dati Python.

    Per una mappatura dei tipi di dati di Amazon Redshift a tipi di dati Python, consultare Tipi di dati Python UDF.

  2. La funzione esegue il programma Python, passando gli argomenti di input convertiti.

  3. Il codice Python restituisce un singolo valore. Il tipo di dati del valore restituito deve corrispondere al tipo di RETURNS dati specificato dalla definizione della funzione.

  4. La funzione converte il valore restituito da Python nel tipo di dati di Amazon Redshift specificato e quindi restituisce il valore alla query.

Nota

Python 3 non è disponibile per Python. UDFs Per ottenere il supporto di Python 3 per Amazon UDFs Redshift, usa invece. Creazione di una Lambda scalare UDF

Esempio di Python UDF scalare

L'esempio seguente crea una funzione che confronta due numeri e restituisce il valore più grande. Tenere presente che il rientro del codice tra i segni di doppio dollaro ($$) è un requisito di Python. Per ulteriori informazioni, consulta CREATE FUNCTION.

create function f_py_greater (a float, b float) returns float stable as $$ if a > b: return a return b $$ language plpythonu;

La seguente query richiama la nuova f_greater funzione per interrogare la SALES tabella e restituire uno COMMISSION o il 20 percento diPRICEPAID, a seconda di quale sia il valore maggiore.

select f_py_greater (commission, pricepaid*0.20) from sales;

ANYELEMENTtipo di dati

ANYELEMENTè un tipo di dati polimorfico. Ciò significa che se una funzione viene dichiarata utilizzando ANYELEMENT il tipo di dati di un argomento, la funzione può accettare qualsiasi tipo di dati Amazon Redshift standard come input per quell'argomento quando viene chiamata la funzione. L'ANYELEMENTargomento viene impostato sul tipo di dati effettivamente passato quando viene chiamata la funzione.

Se una funzione utilizza più tipi di ANYELEMENT dati, è necessario che tutti si risolvano nello stesso tipo di dati effettivo quando viene chiamata la funzione. Tutti i tipi di dati degli ANYELEMENT argomenti vengono impostati sul tipo di dati effettivo del primo argomento passato a unANYELEMENT. Ad esempio, una funzione dichiarata come f_equal(anyelement, anyelement) accetta uno qualsiasi tra due valori di input, purché abbiano lo stesso tipo di dati.

Se il valore restituito da una funzione è dichiarato comeANYELEMENT, almeno un argomento di input deve essereANYELEMENT. Il tipo di dati effettivo per il valore restituito è lo stesso del tipo di dati effettivo fornito per l'argomento ANYELEMENT di input.