以下のコードで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"]}