0

Google bigqueryの問題に直面しています。 Bigqueryに結果を保存する複雑な計算が必要です。だから我々はJavaで複雑な計算を行い、Googleのクラウドデータフローの助けを借りてgoogle bigqueryの結果を保存しています。GoogleクラウドBig query UDF制限

しかし、この複雑な計算は、javaで完了するのに約28分かかります。お客様の要件は20秒以内に行うことです。

Google bigquery UDFオプションに切り替えます。 1つのオプションは、BigqueryレガシーUDFです。 Bigqueryの従来のUDFには、行を1つずつ処理するという制限がありますので、このオプションを段階的に廃止しました。結果を処理するには複数の行が必要です。

第2のオプションはScalar UDFです。ビッグ・クエリー・スカラーUDFは、WEB UIまたはコマンド行からのみ呼び出すことができ、Javaクライアントからトリガーすることはできません。

いずれかの考えがある場合は、問題の進行方法を指示してください。

答えて

1

CREATE TEMPORARY FUNCTIONステートメントが要求のquery属性に渡されている限り、任意のクライアントAPIの標準SQLでスカラーUDFを使用できます。たとえば、

QueryRequest queryRequest = 
    QueryRequest 
     .newBuilder(
      "CREATE TEMP FUNCTION GetWord() AS ('fire');\n" 
       + "SELECT COUNT(DISTINCT corpus) as works_with_fire\n" 
       + "FROM `bigquery-public-data.samples.shakespeare`\n" 
       + "WHERE word = GetWord();") 
     // Use standard SQL syntax for queries. 
     // See: https://cloud.google.com/bigquery/sql-reference/ 
     .setUseLegacySql(false) 
     .build(); 
QueryResponse response = bigquery.query(queryRequest); 
+0

こんにちはElliot、私はこのUDFのために約100行のJSコードを持っています。私は同じ方法でUDFを書くべきですか? –

+0

そうです。残りのクエリテキストと一緒に表示されます。または、[GCSからライブラリとして] JavaScriptファイルのコンテンツを読み込むこともできます(https://cloud.google.com/bigquery/docs/reference/standard-sql/user- defined-functions#including-external-libraries )。 –

1

Big QueryスカラーUDFは、WEB UIまたはコマンド から呼び出すことができ、Javaクライアントからトリガーすることはできません。

これは正確ではありません。

https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions

このドキュメントを参照して、標準SQLを有効にする方法については:https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sqlそれは単に、SQLクエリの一部である - 標準SQLには、任意のアプリケーションや任意のクライアントから使用することができますCREATE TEMPORARY FUNCTIONステートメントを使用して、スカラーUDFをサポートしています 特に、最も簡単なことは、#standardSqlタグをSQLクエリの冒頭に追加することです。

+0

「UDFは一時的なものです。つまり、現在のクエリまたはコマンドラインセッションでのみ使用できます.WebのUDFエディタタブを使用しないでください。 UDF Editorタブは、従来のSQLで使用するためのものです。 –

+0

標準SQLがJavaクライアントからスカラーUDFをサポートする方法を教えてください。 –

+0

標準SQLを有効にする方法を指摘しました。 CREATE TEMPORARY FUNCTION句は、それを使用するすべてのクエリの前に付ける必要があります。 –

関連する問題