2016-06-29 9 views
0

SQL(Redshift)クエリを実行する必要があり、現在jupyter/ipythonノートブックで作業しています。私はsqlalchemy-redshiftを持っています。sqlalchemyで 'json_extract_path_text'(Redshift)を使用できませんか?

from sqlalchemy import create_engine, text 
engine_string = databasepwrd.redshiftconnection() 
engine = create_engine(engine_string) 
from pandas.io import sql 

def run_query(sequalese): 
    '''returns a dataframe given a string SQL query''' 
    sql_query = text(sequalese) 
    df = sql.read_sql(sql_query,engine) 
    return df 

run_query(""" 
SELECT deviceid, json_extract_path_text({extra_ctx, 'skip_login'}) 
FROM table 
LIMIT 10""") 

ここで 'extra_ctx'は、json文字列を含むredshiftテーブルの列です。

SQL Workbenchを使用してデータベースに直接クエリを実行すると、クエリが動作することがわかります。 extra_ctx上の「E」に少し^ポイント -

'ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "extra_ctx" 
LINE 1: SELECT user, json_extract_path_text({extra_ctx, 'skip_lo...' 

<:私は私のノートにそれを実行しようとすると、私はエラーが表示されます。

問題の原因となる考え方について教えてください。助けてくれてありがとう。

+0

SQLで[関数](http://docs.aws.amazon.com/redshift/latest/dg/JSON_EXTRACT_PATH_TEXT.html)をどのように呼び出しているかを確認すると、構文エラーが発生します。あなたは最初の引数としてjson値* from_json *(例えば列)を渡し、* path_elems *のような可変的なテキスト値を渡すことになっています。現在の唯一の引数は有効なSQLでさえありません。つまり、中括弧を削除します。 –

+0

すぐにお返事ありがとうございます。あなたは正しいです、明らかに私は{}は必要ありませんでした。私はドキュメントを誤読しているに違いない - ありがとう。 – drxtrz

答えて

0

構文エラーです。 { 必要ありません。 SQLワークベンチでエラーは発生しませんが、Pythonを実行するとエラーが発生します。

SELECT deviceid, json_extract_path_text(extra_ctx, 'skip_login') 
FROM table 
LIMIT 10 

正常に機能しました。ありがとう、Ilja