以下のコードでhelloworld.pyというファイルを/rootディレクトリに作成します。
#!/usr/bin/python print 'hello world!'
ファイルをデータベースにインストールします。
DATABASE mydatabase; call SYSUIF.install_file('helloworld', 'helloworld.py', 'cz!/root/helloworld.py');
スクリプトを実行します。
SET SESSION SEARCHUIFDBPATH = mydatabase; SELECT DISTINCT * FROM SCRIPT ( SCRIPT_COMMAND('./mydatabase/helloworld.py') RETURNS ('text VARCHAR(30)') );
以下の例では、スクリプトとその他のファイルをインストールしてから、SCRIPTテーブル演算子を実行します。
DATABASE mydb; SET SESSION SEARCHUIFDBPATH = mydb; call SYSUIF.install_file('my_analytics', 'cz!my_analytics.sh!/tmp/my_analytics.sh'); call SYSUIF.install_file('my_model', 'cz!my_model.model!/tmp/my_model.sh'); call SYSUIF.install_file('my_data', 'cz!my_data.dat!/tmp/my_data.dat'); Select * from SCRIPT( on data_table SCRIPT_COMMAND('./mydb/my_analytics.sh –mymodel ./mydb/my_model.model –myadditionaldata ./mydb/my_data.dat') RETURNS('*','score varchar(10)');
この例では、SCRIPTテーブル演算子を使用してPythonスクリプト ファイルを呼び出します。スクリプトmapper.pyはテキスト入力の行(“Old Macdonald Had A Farm”)を読み込み、その行を個別の語に分割し、各語に対し新しい行を作成します。
Pythonスクリプトの例:
#!/usr/bin/python import sys # input comes from STDIN (standard input) for line in sys.stdin: # remove leading and trailing whitespace line = line.strip() # split the line into words words = line.split() # increase counters for word in words: # write the results to STDOUT (standard output); # what we output here will be the input for the # Reduce step, i.e. the input for reducer.py # # tab-delimited; the trivial word count is 1 print '%s\t%s' % (word, 1)
スクリプトをインストールするには、以下のコマンドを実行します。
CALL SYSUIF.INSTALL_FILE('mapper', 'mapper.py' 'cz!/tmp/mapper.py');
テーブル境界には文がテキスト入力の1行として含まれています。
Id int | Name varchar(100) |
---|---|
1 | Old Macdonald Had A Farm |
文を個別の語に分割するには、以下のスクリプトを実行します。
SELECT * FROM SCRIPT ( ON ( SELECT name FROM barrier ) SCRIPT_COMMAND('./mydb/mapper.py') RETURNS ( 'word varchar(10)', 'count_input int' ) ) AS tab; );
結果:
Word | Count_input |
---|---|
Old | 1 |
Macdonald | 1 |
Had | 1 |
A | 1 |
Farm | 1 |
以下の例では、Pythonの組み込みモジュールの一部を使用して、WebサイトのURL問合わせ文字列からJSONオブジェクトを作成します。これは、JSONデータ型を使用した問合わせが可能になるように、Web URLデータをJSONに変換する場合に有用です。
スクリプトには、Pythonバージョン2.6以降がシステムにインストールされていることが必要になります。
‘urltojson.py’ Pythonスクリプト:
#!/usr/bin/python import sys import json import urlparse for line in sys.stdin: print json.dumps(urlparse.parse_qs(urlparse.urlparse(line.rstrip(' \n')).query))
スクリプトをインストールし、サンプル データで実行するSQL:
DATABASE mytestdb; create table sourcetab(url varchar(10000)); ins sourcetab('https://www.google.com/finance?q=NYSE:TDC'); ins sourcetab('http://www.ebay.com/sch/i.html?_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xteradata+merchandise&_nkw=teradata+merchandise&_sacat=0&_from=R40'); ins sourcetab('https://www.youtube.com/results?search_query=teradata%20commercial&sm=3'); ins sourcetab('https://www.contrivedexample.com/example?mylist=1&mylist=2&mylist=...testing'); -- This assumes that urltojson.py is in the current directory. call sysuif.replace_file('urltojson', 'urltojson.py', 'cz!urltojson.py', 0); set session searchuifdbpath=mytestdb; select cast(JSONresult as JSON) from SCRIPT( ON(select url from sourcetab) SCRIPT_COMMAND('./mytestdb/urltojson.py') RETURNS(' JSONresult VARCHAR(10000)') );
結果:
JSONresult ---------------------------------------------------------------------------------------- {"q": ["NYSE:TDC"]} {"mylist": ["1", "2", "...testing"]} {"_from": ["R40"], "_trksid": ["p2050601.m570.l1313.TR0.TRC0.H0.Xteradata merchandise"], "_nkw": ["teradata merchandise"], "_sacat": ["0"]} {"search_query": ["teradata commercial"], "sm": ["3"]}