LoginSignup
1
0

MySQL HeatWave で動作の制限・制約がある SQL 文 (3) 関数・オペレータ

Last updated at Posted at 2023-09-05

こちらの記事の続きです。

今回は関数とオペレータの制限です。

HeatWave で使えない関数・オペレータが含まれる SQL 文は自動的に MySQL DB 側で実行される だけの話であり、こちらのようにデータ不整合が生じるおそれもないので、MySQL HeatWave User Guide に記載された内容を翻訳してそのまま列挙します。

2023/9/6 時点(MySQL バージョン 8.1.0-u1-cloud)の情報です。
今後、制限が変わる可能性があります。

HeatWave で実行できないもの(MySQL DB で実行され HeatWave にオフロードされないもの)

これらに当てはまる関数・オペレータを含む SQL 文を HeatWave で高速化したい場合は、HeatWave で実行できる内容・形式に書き換える、テーブルに含まれる列のデータ型の定義を変更するなどの対応が必要になります。

  • ビット関数と演算子
  • 日付(時刻・日時)値に対するCAST() AS SIGNEDおよびUNSIGNED
  • JOIN述語としてのCOALESCE()
  • METEurope/Amsterdamなどの名前付きタイムゾーンでのCONVERT_TZ()
    • CONVERT_TZ(O_ORDERDATE, 'UTC','EST')CONVERT_TZ(O_ORDERDATE, '+00:00','-05:00')の形に書き換えると使用可
  • 全文検索関数
  • XML・JSON・空間(GIS)およびその他のドメイン固有の関数
  • ユーザー定義関数(Loadable Functions)
  • GROUP_CONCAT()と以下の組み合わせ
    • ORDER BY
    • 辞書エンコードされた文字列型の列(RAPID_COLUMN=ENCODING=SORTED
    • WITH ROLLUP
    • 厳密モード以外(GROUP_CONCAT()は厳密モードでのみ使用可能)
  • YEAR型に対するGREATEST()関数とLEAST()関数
    • GREATEST()関数およびLEAST()関数は、日付(日時・時間)型とそれ以外の型との比較には非対応
  • CASE制御フロー演算子またはIF()関数で、集約関数内になく、GROUP BYキーの一部でもない列を含むもの
  • YEAR型の日付関数
  • VARLENエンコードされていない列に対する文字列関数および演算子
  • 文字列引数と非文字列引数が混在する比較関数で、HeatWave が不正な結果を返す場合がある
  • 列挙(ENUM)データ型と日付(時刻・日時)データ型を持つAVG()集約関数
  • 列挙型・文字列型・日付(時刻・日時)データ型に対する以下の集約関数
    • STD()
    • STDDEV()
    • STDDEV_POP()
    • STDDEV_SAMP()
    • SUM()
    • VAR_POP()
    • VAR_SAMP()
    • VARIANCE()
      • これらのうち、SUM()以外については準結合(セミジョイン)内でも使用不可
        • 例:SELECT FROM A WHERE a1 IN (SELECT VAR_POP(b1) FROM B);
      • これらの集約関数は HeatWave 非対応のデータ型に対しては使用不可
  • WEEK(date[,mode])におけるdefault_week_formatシステム変数
    • mode引数を使用する場合は、mode値を明示的に定義する必要がある

正直なところ、これら全てを静的に解析して対処するのは難しいので、実際に SQL 文を流して判断するのが良さそうですね。


2023/9/6 追記:
続きの記事を書きました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0