[PartiQL入門]第3回 - PartiQLを使ってみよう

記事タイトルとURLをコピーする

はじめに

こんにちは。孔子の80代目子孫兼技術4課の孔です。前回のブログではドキュメント指向データモデルがどのようなものなのかみてみました。RDBでいうレコードを、ドキュメントと呼ばれる単位で記録し、柔軟なスキーマでデータを保存することができるのがドキュメント指向データモデルの特徴・メリットであるとの話をしましたね。

それでは、今回はそのドキュメント指向データモデルを操作するためのPartiQLというクエリ言語をどのように使用できるのかをみてみましょう。

今回のブログの情報は以下のリンクを元に作成しています。英語のチュートリアルとなりますが、より詳細な情報が載っていますので気になる方はご参考ください。

PartiQL Tutorial

環境作成

まずはPartiQLを使用するための環境を作成しましょう。今回作成する環境では、以下のAMIおよびバージョンを使用しています。(各バージョンはブログ作成時に最新だったものとなります。最新のバージョンを使用したい場合は各自バージョンを確認し、コマンドのURLを適切に修正してください。)

  • AMI : ami-00f045aed21a55240, Amazon Linux 2 AMI (HVM), SSD Volume Type (64-bit x86)
  • JDK version : 15.0.1
  • PartiQL REPL version : 0.2.4

まず最初に、Open JDKをインストールします。

$ wget https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_linux-x64_bin.tar.gz
...
$ tar zxvf openjdk-15.0.1_linux-x64_bin.tar.gz
...
$ export JAVA_HOME=/home/ec2-user/jdk-15.0.1/
$ export PATH=$JAVA_HOME/bin:$PATH
$ java --version
openjdk 15.0.1 2020-10-20
OpenJDK Runtime Environment (build 15.0.1+9-18)
OpenJDK 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)

JDKが正しくインストールされたら、PartiQL REPLをダウンロードしてインストールしましょう。

$ wget https://github.com/partiql/partiql-lang-kotlin/releases/download/v0.2.4-alpha/partiql-cli-0.2.4.tgz
...
$ tar xvf partiql-cli-0.2.4.tgz
...
$ alias partiql='<partiql-cliをダウンロードしたディレクトリ>/partiql-cli-0.2.4/bin/partiql'
$ partiql
Welcome to the PartiQL REPL!
PartiQL>

上記のようなプロンプトが出てきたら、プロンプトに SELECT * FROM [1,2,3]を入れ、エンターを2回押して以下のような画面になったら問題なくインストール完了です!

PartiQL> SELECT * FROM [1,2,3]
   |
===' 
<<
  {
    '_1': 1
  },
  {
    '_1': 2
  },
  {
    '_1': 3
  }
>>
--- 
OK!
PartiQL> 

以上で環境作成は終了となります。

味わってみる

PartiQLをインストールすると、すぐ試せるようにいくつかデータが入力されているenvファイルがあります。partiql-cli-0.2.4/Tutorial/codeディレクトリの中に、いくつか.env拡張子も持ったファイルがあるので、こちらのデータを使ってみましょう。

データを呼び出すには、PartiQLを起動する際に-eオプションをつけると呼び出すことができます。

$ partiql -e partiql-cli-0.2.4/Tutorial/code/q1.env  # partiql-cli-0.2.4を解凍したディレクトリで実行しています
Welcome to the PartiQL REPL!
PartiQL> !global_env  # 呼び出されたデータを確認
   | 
===' 
{
  'hr': {
    'employees': <<
      {
        'id': 3,
        'name': 'Bob Smith',
        'title': NULL
      },
      {
        'id': 4,
        'name': 'Susan Smith',
        'title': 'Dev Mgr'
      },
      {
        'id': 6,
        'name': 'Jane Smith',
        'title': 'Software Eng 2'
      }
    >>
  }
}
--- 
OK!
PartiQL> 

ちなみに、元のenvファイルの中身も一応確認してみると、以下のようになっています。

$ cat partiql-cli-0.2.4/Tutorial/code/q1.env
{ 
    'hr': { 
        'employees': <<
            -- a tuple is denoted by { ... } in the PartiQL data model
            { 'id': 3, 'name': 'Bob Smith',   'title': null }, 
            { 'id': 4, 'name': 'Susan Smith', 'title': 'Dev Mgr' },
            { 'id': 6, 'name': 'Jane Smith',  'title': 'Software Eng 2'}
        >>
    }
}

それでは、クエリを投げてみましょう。1回目のブログで紹介しましたが、PartiQLは「SQL 準拠のアクセスをサポートする新しいオープン標準のクエリ言語」と紹介しました。それでは、どうみても関係モデルでないデータモデルに対してSQLを投げてみます。

$ partiql -e partiql-cli-0.2.4/Tutorial/code/q1.env
Welcome to the PartiQL REPL!
PartiQL> SELECT e.id,
   | e.name AS employeeName,
   | e.title AS title
   | FROM hr.employees e
   | WHERE e.title = 'Dev Mgr'
   | 
===' 
<<
  {
    'id': 4,
    'employeeName': 'Susan Smith',
    'title': 'Dev Mgr'
  }
>>
--- 
OK!

ご覧の通り、SQLで使用するSELECTやFROM、WHERE文が使えることがわかります。チュートリアルページを読んでいただくとわかりますが、普通にSQLを使用する感覚で使うことができるので、とても楽です。

最後に

全然違うデータモデルに対して、同じクエリ言語を使って操作できるのは学習コストカットもできるし、アプリケーションにとっても拡張性などが容易になるのでとても嬉しいことです。PartiQLに関する紹介でしたが、いかがだったでしょうか?

より詳細な内容が知りたい方はPartiQLのチュートリアルページがとても充実しているので、是非ご一読ください。この勢いでMongoDBとかも触ってみたいと思います。また何かいい収穫がありましたらご共有しますね!それでは、またお会いしましょう!