ミネムラ珈琲ブログ

さすらいのコーヒー屋/Spreadsheets小説家/WEBサービスディレクターの日記

QUERY関数で一部データが欠損する不具合?

最近、業務でつかっているSpreadsheetで妙なことがあった。

設定ファイルの更新をする際の差分チェックをするために、既存の設定を別ファイルからIMPORTRANGEとQUERYで引っ張っている箇所がある(こんな説明でごめんね、でもこれしか言いようがない)。

今週、その作業をしていたら、想定し得ないぐらいの新規行・廃止行がでてきた。そんなはずはない、更新は軽微だ。明らかにおかしい。不思議に思って中身をチェックするとひどいことに気づいた。

設定は4列からなっていて、どの列も空白は存在しない。にもかかわらず、IMPORTRANGE/QUERYで展開した既存設定は、一部の行の1列だけが欠損していた。

???

念の為元データのあるファイルを検索してチェックするが、そのデータには欠損がない。だとするとIMPORTRANGEとQUERYのどこかで欠損が発生している。

工程をわけてやってみると、IMPORTRANGEでは問題なく参照できていたデータが、QUERYで参照した際に欠損しているのを確認した。QUERYはWHERE句で正規表現絞り込みをしているだけだ。

まったくもって意味がわからない。これまではこんなことはなかったし、どうチェックしてもこんなことが正常系で起きる理屈がない。

仕方がないのでQUERYの利用をやめてFILTERにした。もとよりFILTERで十分な処理だったが、FILTERだとIMPORTRANGEを似会かかないといけない。やや好みではない。

=FILTER(IMPORTRANGE(...),REGEXMATCH(IMPORTRANGE(...),^hoge/)

こちらだと正常に動いた。これはちょっと重大な信頼性の問題だ。