MZ Platformとは › 掲示板 › MZプラットフォームユーザー会掲示板 › CSVファイルをデータベースとして取り扱う方法
- このトピックは、 5 返信、 2 投稿者 です。最終更新日: 7 年, 1 ヶ月 前 MZPlatformユーザー会
-
著者投稿
-
2017年3月29日 at 2:38 PM #4740820ys163一般参加者
通常、CSVファイルは「CSVコンポーネント」を使ってインポートすることでテーブルに取り込むことができますが、他のデータベース(mySQLなど)と同様に、CSVデータをデータベースとして扱える(SQL文でSELECTできる)ことは可能でしょうか。
もし可能な場合、JDBCドライバの設定はどのように記述すれば良いでしょうか。宜しくお願いします。
2017年3月29日 at 6:26 PM #4741MZPlatformユーザー会サイト管理者これまでご質問いただいたようなことを検討したことがありませんでしたが、調べてみると簡単にできるようです。
ここでは、H2というデータベースを使う方法をご紹介します。
http://www.h2database.com/html/main.html上記の公式サイトからZIPファイルをダウンロードしていただき、展開したフォルダに含まれるJARファイルを、MZで利用しているJavaのフォルダ(3.5の標準インストールであれば、C:\MZPlatform\Java\jre8_mz3.5\lib\ext)にコピーしてください。準備はこれだけで完了です。
あとは、データベースアクセスコンポーネントでの接続設定と、SQL文を適切に書くことでCSVファイルを対象とした検索が自由に実行できます。その方法をMZのサンプルアプリを用いて説明します。ここでは「データベースアクセス_3(機能拡張版).mzax」を使います。
上記のアプリが起動したら、設定用のフレームでドライバのフィールドを「org.h2.Driver」、サーバのフィールドを「jdbc:h2:mem:」、ユーザ名とパスワードとデータベース名をすべて空にします。スキーマ使用や大小区別のチェックは外してください。
この状態で接続ボタンを押すと、接続できるはずです。もう一つのフレームにツリーが表示されると成功です。接続に失敗した場合は、JARファイルのコピー先か入力するパラメータの設定に失敗している可能性がありますので、ご確認ください。
最後に、SQL文として下記のようなクエリを作成して実行してみてください。
select * from csvread(‘(ファイルパス)’,null,’Shift-JIS’)
(ファイルパス)のところで検索したいCSVファイルのパス名を指定します。
‘Shift-JIS’はファイルのエンコードに応じて変えるようです。
書き方が合っていれば、CSVファイルの中身がテーブルとして表示されると思います。
これが実行できたら、後ろにwhere節を追加していろいろ試してみてください。こちらでも初めて使用したので、何か制限があるかもしれません。
もし何か問題がありましたらご報告ください。2017年3月29日 at 6:41 PM #4742MZPlatformユーザー会サイト管理者補足ですが、この掲示板に記入したSQL文をコピーペーストして使用すると、シングルクオーテーションが全角文字になってしまって実行時にエラーとなるので、半角に修正してお使いください。
2017年4月2日 at 1:43 PM #4749820ys163一般参加者サポートありがとうございます。
とても助かります。
丁度、社内で「H2データベース」を使っていましたので、こちらにも
応用できそうです。
早速、試してみたいと思います。今回、CSVファイルの検索をする質問をした理由ですが、データに対して2回
加工(集計)の必要な事項があり、ワークデータベースとしてCSVファイルを
使うことを考えました。
MZPFのテーブル上で処理をするのは複雑になるので、SELECT文を使って
2重処理をしたほうが楽と考えてCSVファイルを選択しています。
他の方法があれば勉強したいと思っています。
現在、mySQLデータベースを使っています。2017年10月4日 at 12:55 PM #4857MZPlatformユーザー会サイト管理者(メールより転記)
CSVファイルをデータベースとしてSQL文で検索し計算をする処理を進めています。時間の平均時間を計算したいと思いますが、整数値の場合には「合計」も「平均値」も正常に計算できるのですが、小数点値(例:7.25)になると、エラーになってしまいます。エラー内容としては、型変換エラーみたいなメッセージが出ているので、可能性としては、CSVデータは基本文字なので、「文字→数値」に型を変換してSQL文が処理をする時にエラーになっているのではと考えます。この場合、SQL文の中で「文字→実数」に変換して計算する記述をすることで、計算は可能になりますでしょうか。2017年10月4日 at 12:57 PM #4858MZPlatformユーザー会サイト管理者(メールより転記)
SQL文を下記のようにすると計算できるようです。SELECT koutei,CONVERT(kadou_time,REAL)*3 from CSVREAD(‘(CSVファイルパス)’,null,’Shift-JIS’)
こちらの型変換やデータ型についてはH2の機能になりますので、詳細は下記をご
覧ください。
http://www.h2database.com/html/functions.html#convert
http://www.h2database.com/html/datatypes.html -
著者投稿
- このトピックに返信するには、ログインしてください。