まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:objectstorage

IBM Cloud の比較的新しい機能として、オブジェクトストレージ内の CSV ファイルに対して SQL を実行してレコードを抽出することができるようになりました。その新機能 SQL Query を紹介します。なお以下で紹介する手順は IBM Cloud のライトアカウント(無料版)の範囲内でも実施可能なので、興味ある方はぜひ本記事を参考に使ってみてください。
2021011600



この SQL Query はオブジェクトストレージ内の CSV ファイルを対象として実行するので、まずは(まだ利用していない場合は)クラウドオブジェクトストレージサービスを作成します。プランが「ライト」のものを選択して作成すれば一定条件内で無料で利用可能です:
2021011601


作成したオブジェクトストレージサービスの "Integrations" メニューを表示すると、このオブジェクトストレージサービスに統合されたサービスを確認できます。作成直後ではここには何もないはずですが、画面下部に「SQL Query を新規に作成して統合可能」と案内されています。この SQL Query のアイコンを選択することで、SQL Query (の無料版)を新規に作成して、このオブジェクトストレージと紐付けて利用することができるようになります:
2021011602


作成する SQL Query サービスの属性を設定する画面が表示されます。このプランとして「ライト」を選択すれば一定条件内で無料利用が可能です。最後に「作成」をクリック:
2021011603


SQL Query サービスが追加され、オブジェクトストレージと統合されて利用できるようになりました:
2021011604


また「バケット」メニューを参照すると、SQL Query 用のバケットが1つ追加されていることが確認できます。このバケットは必ずしも利用する必要はありませんが、SQL を実行する CSV ファイルや、SQL の実行結果をファイルとして残したい場合のファイル格納場所として利用できます。

今回はこの作成されたバケット内に CSV ファイルを置いて SQL を実行し、その実行結果ファイルもこのバケット内に作成する手順を以下で紹介します。というわけで、まずはこのバケット内に CSV ファイルを格納するため、バケット名部分を選択します:
2021011605


選択した(作成したばかりの)バケット内のファイル一覧が表示されますが、この時点ではまだ CSV ファイルは格納されていません:
2021011606


もし自分でお持ちの CSV ファイルを利用したい場合は、その CSV ファイルをこの一覧部分にドラッグ&ドロップしてアップロードしていただいても構いません。以下のサンプルでは以前に自分が全く別の目的でラズベリーパイの機器温度等を1秒おきに取得した際の CSV ファイルがあったので、このファイルを使って紹介することにします。

同 CSV ファイルは以下に公開しているので、以下ページを表示して、マウス右クリックから「名前を付けて保存」し、RPDATA.csv という名前で保存してください:
https://raw.githubusercontent.com/dotnsf/RPDATA/master/RPDATA.csv

2021011607
(1行目は列定義、2行目以降がデータで、左から ID、CPU 温度(℃)、CPU 負荷(%)、サイン値)


ダウンロードした RPDATA.csv をオブジェクトストレージ内のバケットにドラッグ&ドロップ(または「アップロード」ボタンからアップロード)して同バケット内に格納しておきます:
2021011608


これで SQL を実行する準備ができました。では SQL Query のサービスに移動します。改めてオブジェクトストレージのサービス画面から Integrations メニューを選択し、統合されている SQL Query サービス名部分を選択します:
2021011601


SQL Query サービス画面が表示されたら、画面右上の "Launch SQL Query UI" ボタンをクリックして UI 画面に移動します:
2021011602


以下のような IBM SQL Query の UI 画面が表示されます(↓この画面ではエラーメッセージが表示されていますが気にしないでください(苦笑)):
2021011603


画面上部に SQL を入力します。その際の from 直後のテーブル部を指定する箇所では、アップロードした CSV ファイルを指定します。CSV ファイルは Target location に表示されている文字列の、最後の result/ を除いて変わりに RPDATA.csv を指定し、最後に Run ボタンをクリックします:
2021011601
("select * from cos://us-south/XXXXXX/RPDATA.csv limit 10" と入力しました。一般的な SQL SELECT 文のテーブル名を指定する箇所にオブジェクトストレージ内の CSV ファイルを URI で指定する形になっています)


すると画面下部に SQL クエリーの実行結果が表示されます。特にテーブル定義をすることなく、CSV の1行目にかかれていた列情報をそのまま使って SELECT 文の実行ができることがわかります:
2021011602


またこの実行結果はもとのオブジェクトストレージのバケット内の新 CSV ファイルとしても保存されています。必要に応じてダウンロードするなどして結果を確認できます:
2021011603


オブジェクトストレージに格納された CSV ファイルに対して直接クエリーを実行できるので、IoT システムなどによって記録された CSV ファイルをバッチ処理でオブジェクトストレージ内に格納できてしまえすれば、(SQL 型のデータベースにインポートすることなく)その CSV ファイルの中から条件にあった列だけを取り出すことができる、ということがわかりました。実行結果もオブジェクトストレージ内のファイルとして生成することができるので、IoT システムなどでセンサーデータを集める場合でも「とりあえずは CSV にしてオブジェクトストレージに入れておけば、条件を指定した取り出しは後からできる」ことになって便利だと感じました。




このエントリが特定の個人を揶揄する目的で作ったものではないことを最初にお断りしておきます。


ちょうど今(2016/Mar/24)話題になっている某氏の謝罪ウェブサイトを見ていて、あることに気付きました:
2016032400


このページの内容自体にどうこう言うつもりはありません。問題はこのページの URL です。http://ototake.com/ にアクセスするとこのページが表示されるようになっています。もともとはこの人のウェブページ用のサーバーだったはずだけど、トップページだけ作り変えたのでしょうか?


ではプロフィール紹介用のページ http://ototake.com/profile/ はどうなっているのか、と思ってアクセスすると、404 エラー(ページが見つからない)になりました:
2016032402


ちなみに(グーグルのキャッシュによると)以前はこんなページだったはず:
2016032403


トップページを変えただけでなく、プロフィールページも消したのか・・・ いや違う。このエラーページの内容は単なる「ページが見つからない」ではなく、"Code: NoSuchKey" とか、 "Key: profile" とか、何かをシステマチックに探した上で見つからない、というエラーに見えます。単にページ内容を入れ替えたものではなさそうです。


この謎はアドレスを逆引きして分かりました:
2016032401


なるほど、Amazon S3静的ウェブホスティング機能を使って作られたページだったようです。ということはどこかに元のページも残しつつ、DNS の切り替えだけでこの謝罪ページに飛ぶよう設定されていた、ということです。

なかなかうまい方法だと思いました。まず今回のような謝罪ページは一時的にアクセスが集中する可能性があるので、今まで使っていたウェブサーバーの中身を置き換えただけではアクセスを捌ききれる保証はありません。そこを S3 の静的ウェブホスティングにすれば比較的安価に(アカウントを新規に作れば1年間は無料で)それなりの可用性が保証されたこのページを作ることができます。 そして DNS の切り替えでこの新ページを運用しているとすれば、謝罪終了(?)後に元のページへ戻す作業も DNS を切り替え直すだけで簡単に済みますし、その後は謝罪ページも消してしまえば、それ以降の料金はかかりません。 ということは現在のサーバーを落とす必要もないので、再切り替え時の手間やトラブルも少なく済みそう、と推測されます。


このやり方はうまいなあ、と思いました。DNS の切り替えにかかるタイムラグや、各種キャッシュの切り替わりを意識する必要はあるにせよ、コスパのいい謝罪ページ運用だと感心してしまいました。もちろん謝罪用だけでなく、何らかの事情で一時的に異なるページを表示する必要が生じた場合の方策と考えても使えると思います。

S3 互換のオブジェクトストレージサービスを運用している会社にとってはビジネスの参考になります(苦笑)。


このページのトップヘ