2016-11-04 6 views
1

こんにちは、ありがとうございました.... 日付文字列(つまりdate_start)は、 2つの印刷関数の出力(以下のコードに従います)が、結果セットがヌルであるため、where句で日付として認識されません(結果セットは、ハードコードされた日付文字列リテラルを使用すると関数外でヌルではありません)。pandas read_gbqを使用して日付文字列を関数に渡すことができません。

date_start = '2016-10-14 09:00:00' 
    def get_recs_w_date_range(date_l): 
     "Iterate through various date ranges to create the a timeframe sample for later aggregation" 
    global df1 
    global date_g 
    date_g = date_l 
    df1 = pd.read_gbq("select Timestamp, bytes, dst_addr, cast(dst_port as integer) as dst_port, \ 
    cast(duration_ms as integer) as duration_ms, protocol, flow_direction \ 
    FROM ipfix.ipfix \ 
    where Timestamp between timestamp('date_l') and timestamp('2016-10-14 09:00:30') limit 50", 
       project_id="network-sec-analytics") 
    print('The value of local var date_l is: {}'.format(date_l)) 
return 

get_recs_w_date_range(date_start) 

print('The value of global var date_g is: {}'.format(date_g)) 

df1 

    The value of local var date_l is: 2016-10-14 09:00:00 
    The value of global var date_g is: 2016-10-14 09:00:00 

答えて

1

[OK]を、私はそれを修正するのは簡単だと思うあなたは、あなたがやっていない、あなたのクエリにdate_lの値を転嫁する必要があり、これを試してみてください:。

def get_recs_w_date_range(date_l): 
    """Iterate through various date ranges to create the a timeframe sample for later aggregation""" 
    query = """SELECT Timestamp, bytes, dst_addr, 
       cast(dst_port as integer) as dst_port, 
       cast(duration_ms as integer) as duration_ms, 
       protocol, flow_direction 
       FROM ipfix.ipfix 
       WHERE Timestamp BETWEEN timestamp('{}') AND 
       timestamp('2016-10-14 09:00:30') 
       LIMIT 50""".format(date_l) 
    return pd.read_gbq(query, project_id="network-sec-analytics") 

formatの方法は{}の代わりにdate_lの値を使用します。あなたの質問は今すぐうまくいくはずです。

+0

洞察力Kartik ...ありがとうございました。非常に役立ちます。あたかも日付文字列に書式問題があるように見えます。私はこの初期化を追加しました:date_start = '2016-10-14 09:00:00'そしてget_recs_w_date_range(date_start)で関数を呼び出しました。私はこのエラーが発生しています:GenericGBQException:理由:invalidQuery、メッセージ: "" 09:00:00 ""行0、列0に遭遇しました。 期待していました: ")" ... – EcoWarrior

+0

引用問題のようです。 '{}'を一重引用符で囲み、試してみてください。基本的に: '... BETWEENタイムスタンプ( '{}')AND ...' – Kartik

+0

はい、あなたは正しいです!ご協力ありがとうございますKartikとGo Terps !! – EcoWarrior

関連する問題