Actian Zen のデータをテキストファイルに抽出する方法
お客様からよく問い合わせのある項目の一つに、Zen/PSQL で管理しているデータベースからテキストでデータを取り出したいというご要望があります。
データが DDF(データ定義ファイル)付きで作成されている場合は、この作業は付属ツールを使用して簡単に行うことができます。
Btrieve ネイティブファイルは、テーブルのスキーマを含んでいません。
このため、DDF 無しのファイルに対してツールを利用するためには、最初に DDF を定義する必要があります。
DDF は「DDF Builder」により設定可能です。
DDF Builder の使い方については、今回の話から少し外れるので、こちらのマニュアル内容(DDF Builder User’s Guide)をご参照ください。
DDF がある場合、テーブルデータをテキストに出力する方法は、次のようにいくつかのやり方があります。
ここでは、順番にこれらの方法を見ていきましょう。
ZenCC (Zen Control Center) を使用する
ZenCC(旧名 pcc)は、テーブルをテキストに出力する機能をもっています。 データベースに不慣れなユーザーの場合、GUI で操作できる ZenCC でテキストデータを作成するのがもっとも簡単です。
1) ZenCC を起動し、テキスト出力したいテーブルを左ペインのツリーから選択します。 br>
2) そのままマウスで右クリックし、「データのエクスポート」を選択します。
3) エクスポート先を指定して[完了]ボタンをクリックします。
別のシステムなどで加工するため、定期的にテキストデータを抽出する必要がある等、作業を自動化したい場合には、このような GUI ツールの使用は向いていません。
作業を自動化する場合、次に説明する2つの方法が利用できます。
DEU(Database Export Utility)を使用する
Zen v14 SP1 では、データベースのテーブルをエクスポートするコマンドラインツール DEU(Database Export Utility)が、新たに追加されました。
Zen 14 をお使いの場合、このツールをバッチ処理で利用すれば、お手軽にデータ抽出の自動化が行えます。
DEU の使い方は簡単です。
コマンドプロンプトを起動し、任意のフォルダに移動します。抽出したいデータを取り出す SELECT ステートメントを テキストファイルで用意します。
このファイルと、出力先となるテキストファイル名を指定します。
例として DEMODATA の ROOM テーブルのデータを result.txt に抽出します。
「SELECT * FROM ROOM」と書き込んだ sql.txt を用意します。
echo SELECT * FROM ROOM> sql.txt |
次のコマンドを実行します。
deu demodata sql.txt result.txt |
先頭行に列名を書き込むオプション等も用意されていますので、deu とだけ入力して表示される説明やマニュアルなどで詳しい使用方法をご確認ください。
コマンド ライン インターフェイス ユーティリティ : deu
スクリプト言語を利用する
Zen v13 以前の製品をお使いの場合でデータ抽出をしたい場合は、残念ながら製品付属のユーティリティは GUI の ZenCC / PCC を使用する以外の方法はございません。
しかしながら、ご自身でスクリプトを用意すれば簡単にコマンドラインを使ったデータ抽出は可能です。
Zen は ODBC をサポートしていますので、Perl や Python といったスクリプト言語を使えばデータは抽出できますが、これらのスクリプト言語は別途インストールする必要があるため、ここでは Windows 標準でインストールされている PowerShell を利用したデータ抽出をご紹介します。
【Powershell スクリプトの準備】
Zen のサンプルDB 「DEMODATA」の ROOM テーブルから、データを取り出すスクリプトを書いてみます。
次のようなスクリプト「ps.ps1」として用意し、PowerShell 上で実行します。
なお、PowerShell でスクリプトを実行するには、実行ポリシーを変更する必要があります。
管理者権限で PowerShell を起動後、次のコマンドを実行してください。
Set-ExecutionPolicy RemoteSigned |
ps.ps1 は、以下より Zip ファイルダウンロードし、解凍いただければご確認いただけます。
ps.ps1 のダウンロード
これで DEMODATA 内の ROOM テーブルの内容が取り出せるはずです。
動作をご確認の上、お客様の環境に合わせて内容を変更してご活用ください。
以上で本稿の説明は終わりですが、番外編として Linux 環境で PowerShell を使用する方法も記載します。
番外編:Linux 環境で PowerShell を使うには
PowerShell は、Windows だけでなく Linux や macOS もサポートするマルチプラットフォームのツールです。以下の文章では、Linux 環境に Powershell を導入し、Zen データベースへ PowerShell 上からアクセスする方法についてお伝えします。
【環境について】
今回は、Redhat Enterprise Linux(以降 RHEL)を使用します。執筆時点での最新版である RHEL 8.1 で説明していますが、以前のバージョンでも特に違いはございません。
また、使用している Zen は Enterprise Server 版 14.01.011 を使用しています。
【Powershell のインストール】
まず最初に、Powershell のインストールを行います。
Linux 版の Powershell は、お使いのディストリビューションにより手順が異なります。
RHEL 8.1 の場合、次のコマンドでインストールします。
# Register the Microsoft RedHat repository curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo # Install PowerShell sudo yum install -y powershell # Start PowerShell pwsh |
実行例を掲載しておきます。
[root@agtech.co.jp local]# curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 193 100 193 0 0 556 0 –:–:– –:–:– –:–:– 556 [packages-microsoft-com-prod] name=packages-microsoft-com-prod baseurl=https://packages.microsoft.com/rhel/7/prod/ enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc [root@agtech.co.jp local]# [root@agtech.co.jp local]# # Install PowerShell [root@agtech.co.jp local]# sudo yum install -y powershell Updating Subscription Management repositories. packages-microsoft-com-prod 8.2 MB/s | 29 MB 00:03 Red Hat Enterprise Linux 8 for x86_64 – AppStre 7.4 MB/s | 14 MB 00:01 Red Hat Enterprise Linux 8 for x86_64 – BaseOS 13 MB/s | 14 MB 00:01 メタデータの期限切れの最終確認: 0:00:04 時間前の 2020年02月05日 03時17分57秒 に実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール: powershell x86_64 6.2.3-1.rhel.7 packages-microsoft-com-prod 54 M トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 54 M インストール済みのサイズ: 54 M パッケージのダウンロード: powershell-6.2.3-1.rhel.7.x86_64.rpm 2.6 MB/s | 54 MB 00:20 ——————————————————————————– 合計 2.6 MB/s | 54 MB 00:20 警告: /var/cache/dnf/packages-microsoft-com-prod-687ce8c973efa9d3/packages/powerf: NOKEY packages-microsoft-com-prod 3.6 kB/s | 983 B 00:00 GPG 鍵 0xBE1229CF をインポート中: Userid : “Microsoft (Release signing) Fingerprint: BC52 8686 B50D 79E3 39D3 721C EB3E 94AD BE12 29CF From : https://packages.microsoft.com/keys/microsoft.asc 鍵のインポートに成功しました トランザクションの確認を実行中 トランザクションの確認に成功しました。 インストール済み: powershell-6.2.3-1.rhel.7.x86_64 完了しました! [root@agtech.co.jp local]# pwsh Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/pscore6-docs Type ‘help’ to get help. PS /usr/local> |
その他のディストリビューションへの導入方法など、詳細は Microsoft 社のドキュメントにありますので、こちらの内容を参考にインストールしてください。
【Zen のインストール】
Zen のインストーラは、rpm 版と tar 版の2種類があります。
ここでは、話を簡潔にするため、rpm 版のインストールを説明します。
RPM では -ivh オプションでインストールします。
sudo rpm -ivh Zen-EnterpriseServer-jajp-linux-14.01-011.000.x86_64.rpm |
これで、/usr/local/actianzen/ に Zen がインストールされます。
※アンインストールについて
なお、アンインストールの際には、-e オプションでアンインストールします。
インストールされているパッケージ名を調べてアンインストールしてください。
例)
# rpm -qa|grep Zen Zen-EnterpriseServer-jajp-linux-14.01-011.000.x86_64 # rpm -e Zen-EnterpriseServer-jajp-linux-14.01-011.000.x86_64 |
【ODBC の設定】
システムに ODBC ライブラリ「unixODBC」をインストールします。
RHEL の場合、
# yum install -y unixODBC |
でインストールができます。
Zen をインストールすると、ODBC の設定ファイル odbc.ini、odbcinst.ini が actianzen/etc に保存されています。
これは、ひな形で用意されているファイルになります。
通常、システムは /etc の下にこれらのファイルが存在する事を前提としているので現在存在する ini ファイルを確認し、中身が空ならシンボリックリンクで Zen の用意する ini ファイルを参照します。
cd /etc ln -s /usr/local/actianzen/etc/odbc.ini ln -s /usr/local/actianzen/etc/odbcinst.ini |
root ユーザーは、環境変数やライブラリパス等コマンドラインの各種設定が行われていませんので、手早く確認するには、 su で管理者になった後、su zen-svc で Zen の管理ユーザー(zen-svc)に変更してから用意したスクリプトを実行します。
su su zen-svc cd /usr/local/actianzen pwsh ./ps.ps1 |
以上で、番外編の説明も終わりです。
お疲れさまでした。