CSVファイルをデータベースとして取り扱う方法

MZ Platformとは 掲示板 MZプラットフォームユーザー会掲示板 CSVファイルをデータベースとして取り扱う方法

6 件の投稿を閲覧中 - 1 ~ 6 件(全 6 件)
  • 著者
    投稿
  • #4740
    820ys163
    一般参加者

    通常、CSVファイルは「CSVコンポーネント」を使ってインポートすることでテーブルに取り込むことができますが、他のデータベース(mySQLなど)と同様に、CSVデータをデータベースとして扱える(SQL文でSELECTできる)ことは可能でしょうか。
    もし可能な場合、JDBCドライバの設定はどのように記述すれば良いでしょうか。

    宜しくお願いします。

    #4741
    MZPlatformユーザー会
    サイト管理者

    これまでご質問いただいたようなことを検討したことがありませんでしたが、調べてみると簡単にできるようです。

    ここでは、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節を追加していろいろ試してみてください。

    こちらでも初めて使用したので、何か制限があるかもしれません。
    もし何か問題がありましたらご報告ください。

    #4742
    MZPlatformユーザー会
    サイト管理者

    補足ですが、この掲示板に記入したSQL文をコピーペーストして使用すると、シングルクオーテーションが全角文字になってしまって実行時にエラーとなるので、半角に修正してお使いください。

    #4749
    820ys163
    一般参加者

    サポートありがとうございます。
    とても助かります。
    丁度、社内で「H2データベース」を使っていましたので、こちらにも
    応用できそうです。
    早速、試してみたいと思います。

    今回、CSVファイルの検索をする質問をした理由ですが、データに対して2回
    加工(集計)の必要な事項があり、ワークデータベースとしてCSVファイルを
    使うことを考えました。
    MZPFのテーブル上で処理をするのは複雑になるので、SELECT文を使って
    2重処理をしたほうが楽と考えてCSVファイルを選択しています。
    他の方法があれば勉強したいと思っています。
    現在、mySQLデータベースを使っています。

    #4857
    MZPlatformユーザー会
    サイト管理者

    (メールより転記)
    CSVファイルをデータベースとしてSQL文で検索し計算をする処理を進めています。時間の平均時間を計算したいと思いますが、整数値の場合には「合計」も「平均値」も正常に計算できるのですが、小数点値(例:7.25)になると、エラーになってしまいます。エラー内容としては、型変換エラーみたいなメッセージが出ているので、可能性としては、CSVデータは基本文字なので、「文字→数値」に型を変換してSQL文が処理をする時にエラーになっているのではと考えます。この場合、SQL文の中で「文字→実数」に変換して計算する記述をすることで、計算は可能になりますでしょうか。

    #4858
    MZPlatformユーザー会
    サイト管理者

    (メールより転記)
    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

6 件の投稿を閲覧中 - 1 ~ 6 件(全 6 件)
  • このトピックに返信するには、ログインしてください。