区切り形式ファイルソース

区切り形式ファイル (DF) データソースを使用して、以下のようなプレーンテキストファイルからデータを抽出します。

  • カンマ区切り値ファイル (CSV ファイル): このデータソースでは、区切り文字としてカンマなどの任意の文字を使用できます。

  • 正規表現で表現できる複雑な構造を持つファイル; アプリケーションのログファイルなどがあります。

  • 固定幅ファイル: 列を区切る文字が存在せず、各列の幅が固定されているファイルです。

新しい DF (区切り形式ファイル) データソースを作成するには、[Server Explorer] で右クリックして、[New] > [Data source] > [DF] の順にクリックします。

データソースを作成するためのダイアログが表示されます。

Importing from a new delimited file source

新しい区切り形式ファイルソースからのインポート

以下のデータが必要です。

  • Name: 新しいデータソースの名前。

  • Data route: 区切り形式ファイルへのパス。使用可能なパスの形式の詳細については、「 Virtual DataPort でのパスの種類 」を参照してください。このパスは、 補間変数 を使用してパラメーター化できます (「 補間変数によるパスなどの値 」を参照)。

    [Data route] で [Local] または [FTP / SFTP / FTPS Client] を選択していて、ルートでディレクトリが参照されている場合、このデータソースから作成した基本ビューには、1 つのファイルからではなく、そのディレクトリにあるすべてのファイルからデータが取得されます。これらのどのファイルにあるデータも、スキーマが同じであることが必要です。

    ルートがディレクトリを参照していても、そのディレクトリにあるファイルの一部のみを処理する場合は、処理するファイルの名前に一致する正規表現を [File name pattern] ボックスに入力します。たとえば、 log を拡張子として C:\log_files フォルダーに存在するすべてのファイルのデータを返すデータソースから基本ビューを作成する場合は、[Local path] を C:/log_files に設定し、[File name pattern] を (.*)\.log に設定します。[File name pattern] は正規表現であり、ファイルパターンではない点に注意します。ピリオドの前に「」を付加しているのはそのためです (正規表現では、前にスラッシュが記述されていないピリオドは任意の 1 文字と一致します)。

    注釈

    日付に基づく命名規則 (ログファイルによく見られる規則) を使用しているファイルからデータを取得するには、 ^DateRange 補間関数を使用します。この関数の詳細については、「 日付範囲を使用したパス 」を参照してください。

  • Ignore route errors: チェックすると、データソースで参照されているファイルにアクセスしたときに発生したエラーが、そのデータソースによって無視されます。

    このオプションの主な目的は、データソースで複数のファイルが参照されていて、その一部が存在しない可能性があることがわかっている場合に、見つからないファイルを無視することにあります。たとえば、以下のローカルパスにある一連のログファイルを読み取る DF データソースを作成できます。

    /opt/denodo/denodo/logs/apache-tomcat/http_access.^DateRange("yyyy/MM/dd",@start_date,@end_date,"yyyy-MM-dd").log
    

    DateRange の詳細については、「 Paths Using Date Ranges 」を参照してください。

    このデータソースから作成した基本ビューにクエリを実行すると、そのデータソースではすべてのログファイルを順番に読み取ります。たとえば、クエリで条件として start_date='2018/05/01' AND end_date = '2018/05/04' を指定した場合、データソースは http_access_2018-05-01.log、http_access_2018-05-02.log、http_access_2018-05-03.log、および http_access_2018-05-04.log の各ファイルを読み取ろうとします。これらのファイルのいずれかが存在しない場合、このクエリは失敗します。

    このエラーを無視する場合は、[Ignore route errors] チェックボックスをチェックします。このようにすると、ファイルのいずれかが存在しない場合、そのファイルは無視され、次のファイルが読み取られます。管理ツールからこのクエリを実行すると、読み取ることができなかったファイルを [Execution trace] で特定できます。そのためには、このトレースで、「 Type = Route 」と表示されているノードをクリックします。読み取ることができなかったファイルには、 Exception 属性の後にエラーメッセージが表示されています。

CSV ファイルの処理

カンマ区切り値ファイル (CSV ファイル) を処理するには、[Use column delimiter] を選択して、[Column delimiter] ボックスに各値の区切り文字を入力します。区切り文字には、カンマをはじめとする各種の文字を使用できます。複数の区切り文字を入力した場合、その動作は [Delimiter consists of multiple characters] チェックボックスの設定によって異なります。

  • このチェックボックスをチェックして、複数の区切り文字を入力した場合は、それらの文字をすべて使用して値を区切る必要があります。たとえば、 -|- と入力した場合、ファイルを以下の構造とする必要があります。

    value 1-|-value 2-|-value 3-|-value4
    
  • このチェックボックスをチェックせずに複数の区切り文字を入力した場合は、それらの文字のどれもが区切り文字と見なされます。たとえば、 ,| と入力した場合、データソースでカンマ (,) または 縦棒 (|) が検出されるたびに、新しいフィールドの開始と見なされます。

「不可視」文字は、特殊な方法で入力する必要があります。以下の表を参照してください。

列区切り文字として使用する不可視文字

文字

意味

\t

タブ

\n

改行

\r

キャリッジリターン

\f

フォームフィード

注釈

テキスト修飾子は二重引用符 (") です。

複雑な構造のファイル (正規表現) の処理

正規表現で表現できる複雑な構造のファイルを処理するには、[Use tuple pattern] を選択して、[Tuple pattern] に正規表現を入力します。この方法は、構造が固定されていることが多いログファイルの処理で効果的です。

この正規表現は、ファイルに記述された 1 行のデータの形式を指定します。この表現は、取得する部分のみではなく、ファイルの 1 行 (または複数行) 全体と一致している必要があります。このデータソースから作成したビューの各フィールドは、データを取得する正規表現の集合になります。以下に例を示します。

(\d\d\d\d)-(\d\d)-(\d\d) - (.*)

これらの正規表現の構文は、Java 言語で定義されています (これらの表現の構造については、Java クラスのドキュメント「 Pattern 」を参照)。

後述する「 タプルパターンを定義する手順の例 」では、タプルパターンを使用したデータソースの例を紹介しています。

固定幅ファイルの処理

値の幅が固定されているファイルを処理するには、[Use fixed length] を選択して以下の値を指定します。

  • Column widths (bytes): 整数のカンマ区切りリスト。各整数は、 バイト数 で表した列のサイズを示します。たとえば、ファイルに 7 つの列がある場合、7 つの整数をカンマ区切りで入力する必要があります。

    この幅は、文字数ではなく、バイト数である点に注意してください。マルチバイト文字を記述したファイルを処理する場合は、この点を考慮する必要があります。たとえば、「例」という文字は 1 文字ですが、2 バイトで構成されています。

  • Pad character: 固定幅ファイルで、割り当てたバイト数より値の幅が少ない場合、値がない部分は通常は空白文字でパディングされます。空白文字以外の文字でパディングする場合は、[Use custom value] を選択して、その文字を入力します。複数の文字を入力した場合、それらのすべてがパディング文字と見なされます。

  • Replace character: 指定した文字セットで表現できない値の代わりにデータソースから返す文字。ほとんどのファイルでは、[Use default value (whitespace)] をチェックしておけば問題ありません。カスタム値を入力する場合は 1 文字を入力します。

    ファイルで想定外のエンコードが使用されている場合を除き、このオプションが適用されることはほとんどありません。たとえば、[column width] で「1,1」 (1 バイトの列が 2 つ) を指定し、エンコードを「UTF-8」と指定している場合、データソースで読み取ったファイルの先頭文字がマルチバイトであるとします。このマルチバイト文字の 1 バイト目はどの文字にも該当しないと考えられるので、データソースによって空白文字またはユーザー指定の文字に置き換えられます。

  • Alignment: 値をパディングする場合に、値の文字揃え (左または右) を指定します。


  • End of line delimiter: タプルの末尾を示すために使用する文字列。デフォルト値は \n (キャリッジリターン) です。

    注釈

    Virtual DataPort が動作しているオペレーティングシステムに関係なく、行末を示すには、 \r\r\`n ではなく、 \ を使用します。

    注釈

    固定幅ファイルの場合、このパラメーターは空のままでかまいません。行末が存在しないファイルでは、このボックスを空のままにします。

  • Start of data zone delimiter: データソースでデータの取得を開始する位置 ([Header] オプションをチェックしている場合はヘッダーの取得を開始する位置) を指定する Java 正規表現。空の場合は、ファイルの先頭から検索を開始します。

  • Start delimiter from variable: チェックしている場合は、実行時に「データゾーンの区切り文字」に置き換えられる補間変数の名前が [Start of data zone delimiter] と見なされます。

  • Include start delimiter as data: チェックしている場合、[Start of data zone delimiter] の表現に一致するテキストも検索対象になります。

  • End of data zone delimiter: データソースでは、この文字列を検出すると、ファイルからのデータ取得を停止します。空の場合、ファイルの末尾までデータ取得が継続します。

  • Include end delimiter as data: チェックしている場合、[End of data zone delimiter] の表現に一致するテキストが結果に取り込まれます。

  • Header: チェックしている場合、ファイルのフィールド名がデータ領域の先頭行に記述されていると見なされます。これらの名前は、このデータソースから作成した基本ビューのフィールド名になります。

  • Header pattern: ヘッダーを構成するフィールド名を抽出するために使用する Java 正規表現。ヘッダーの構造とデータの構造が異なる場合にのみ、このオプションを指定する必要があります。このオプションは、[Header] オプションをチェックしている場合にのみ使用できます。

  • Ignore matching errors: チェックしている場合、データファイルの各行のうち、想定している構造を持たない行がデータソースによって無視されます。このような行とは、想定した列数と列数が異なる行や、タプルパターンを指定している場合にそのパターンに一致しない行のことです。

    このチェックボックスをチェックしていない場合、想定している構造を持たない行があると、データソースからエラーが返されます。このチェックボックスをチェックしておくと、クエリを実行したときに、データソースによって無視された行があるかどうかを確認できます。そのためには、管理ツールでクエリを実行します。つづいて、[View execution trace]、[Route] ノードの順にクリックすることによって、Number of invalid tuples 属性を確認します。

[Metadata] タブでは、データソースの格納先フォルダーと説明を設定できます。

データソースを編集する際、 image1 ボタンをクリックすると、その所有者も変更できます。

[Save] をクリックして、データソースを作成します。

つづいて、[Create base view] をクリックして、新しいデータソースから基本ビューを作成します。データファイルへのパスに補間変数を使用している場合は、その値を指定する必要があります (変数を使用してファイルへのパスを作成する手順については、「 補間変数によるパスなどの値 」を参照)。

基本ビューのスキーマが表示されます。この時点で、ビューの名前およびその属性の名前と型を変更できます。[Metadata] タブで [Browse] をクリックして、新しい基本ビューの保存先フォルダーを選択したうえで [Save] (image2) をクリックします。

[Server Explorer] で新しい基本ビューをダブルクリックして、そのスキーマを表示します。[Edit] をクリックして、ビューの編集ウィザードを開きます。このウィザードで、基本ビューの名前とタイプを変更できます。

タプルパターンを定義する手順の例

ここでは、2 つの例を取り上げ、タプルパターンを使用して定義する区切り形式ファイルデータソースについて説明します。これらの例では静的な値を使用していますが、タプルパターンの値には補間変数を使用できます (補間変数の詳細については、「 補間変数によるパスなどの値 」を参照)。

タプルパターンの例 1: 以下の形式で製品情報を収めたファイルがあるとします (discount 属性はオプションです)。

タプルパターンの例 1: 区切り形式ファイルの内容
product_name=Acme Laptop Computer;price=1500 euro;discount=50
product_name=Acme Desktop Computer;price=1000 dollar

以下のパターンを使用して、各製品に関する次の情報をそれぞれの行から抽出できます。

  • 製品名

  • 価格と通貨

  • 割引。割引の値が存在しないタプルの場合、このセルの値は NULL です。

タプルパターンの例 1: ファイルの内容を抽出する正規表現
Product_name=(.+);price=([0-9]+)\s(.+);(?:discount=(.+))?

タプルパターンの例 2: Windows コマンド DIR の出力から、ファイルの名前 (ディレクトリではありません)、日付、およびサイズを抽出するとします。

タプルパターンの例 2: Windows コマンド DIR の出力
11/07/2007 10:10 <DIR>           .dbvis
09/18/2008 15:09 <DIR>          .eclipse
01/19/2011 16:55 <DIR>          .gimp-2.6
11/10/2009 18:43         215   .ITLMRegistry
03/26/2010 14:16       3.498   .keystore
05/18/2010 17:56 <DIR>          .m2
02/02/2010 15:23 <DIR>          .maven
03/26/2010 14:01 <DIR>          .netbeans
02/02/2011 19:20 <DIR>          .smc_cache
06/15/2010 09:59 <DIR>          .ssh
10/14/2009 13:26 <DIR>          .thumbnails
02/15/2010 12:06           0   .Xauthority
01/16/2008 12:02         517    ant.install.log
02/11/2010 13:29 <DIR>          Application Data
07/16/2010 08:51         772    build.properties
02/18/2008 15:19 <DIR>          Contacts
01/14/2011 10:02         190    default-soapui-workspace.xml
02/07/2011 11:44 <DIR>          Desktop
04/01/2009 15:11 <DIR>          Favourites
08/22/2008 12:50 <DIR>          Start Menu
01/27/2011 17:18 <DIR>          My Documents
02/12/2009 12:36         201   osdadmin.ini
01/14/2011 10:02         7.958   soapui-settings.xml
02/09/2010 10:02        22.358   temp.txt
02/10/2011 09:22 <DIR>          Tracing
03/05/2010 09:41             0   vdpws.log
04/17/2009 09:49 <DIR>          workspace

タプルパターンは以下のように記述する必要があります。

タプルパターンの例 2: コマンド DIR の出力を抽出する正規表現
(\d{2}?/\d{2}?/\d{4}?)\s+?\d{2}:\d{2}.*?(\d[^ ]*)\s(.*)

このタプルパターンから作成する基本ビューには、ファイルの日付、サイズ、および名前の 3 つのフィールドが存在します。

日付範囲を使用したパス

日付に基づく命名規則 (ログファイルで多用される規則) を使用しているファイルにアクセスする場合は、 ^DateRange 補間関数を使用して、特定の開始日から終了日の範囲にあるファイルのみが考慮されるようにします。

^DateRange 関数の構文を以下に示します。

^DateRange (
    pattern of the date range : text
  , start date : text
   , end date : text
   , pattern of the files : text
   )
  • Pattern of the date range: start date パラメーターと end date パラメーターのパターン。このパターンは、Java API の SimpleDateFormat クラスで指定されている構文に従います。

    たとえば、 yyyy-MM-dd は、<year (4 digits)>-<month in year (2 digits)>-<day in month (2 digits)> を表すパターンです (例: 「2014-01-31」)。

    このパラメーターには、リテラルまたは補間関数を使用できます。

  • Start date: 日付範囲の最初の日。この値は、関数の 1 番目のパラメーターで指定したパターンに従う必要があります。リテラルまたは補間関数を使用できます。

  • End date: 日付範囲の最後の日。この値は、関数の 1 番目のパラメーターで指定したパターンに従う必要があります。リテラルまたは補間関数を使用できます。

  • Pattern of the file names: ファイル名のパターン。このパラメーターには、リテラルまたは補間関数を使用できます。

重要

この関数を使用する場合、以下の 2 つのルールに従います。

  1. DateRange 関数のリテラルパラメーターは、二重引用符で囲む必要があります。この関数では、一重引用符は使用できません。

  2. DateRange 関数のパラメーターの間には空白を記述できません。

例 1

アプリケーションによって毎日生成されるログファイルが C:/logs ディレクトリにあるとします。これらのファイルの名前は、パターン application_log_<year>-<month>-<date>.log に従います (例: application_log_2014-11-19.log)。

2014 年 1 月のすべてのログファイルを読み取るデータソースを作成するには、データソースのパスを以下のように設定します。

C:/logs/application_log_^DateRange("yyyy/MM/dd","2014/01/01","2014/01/31","yyyy-MM-dd").log

1 番目のパラメーター (yyyy/MM/dd) の値は、その後に関数の開始日と終了日の各パラメーターが続くパターンです。

このデータソースから作成した基本ビューからは、データが「順番」に返されます。つまり、この日付範囲にあるファイルをこのデータソースで読み取る場合、まず 1 月の最初の日のファイル (application_log_2014-01-01.log) が読み取られます。次にその翌日のファイル (application_log_2014-01-02.log) が読み取られ、次にその翌日のファイル (application_log_2014-01-03.log) が読み取られて、以下同様に続きます。

[Ignore route errors] チェックボックスをチェックしていない場合、この日付範囲に該当するファイルの 1 つが実行時に見つからないと、クエリからエラーが返されますが、見つかったすべてのファイルの内容も返されます。たとえば、 application_log_2014-01-15.log ファイルが存在しない場合、このデータソースに実行したクエリからはその状況を説明するエラーメッセージが返されますが、結果には、 application_log_2014-01-16.log など、それ以外のすべてのファイルのデータが存在します。

例 2

前の例では、ファイルの日付範囲は固定され、実行時に変更できませんでした。この範囲を動的に指定する必要がある場合は、 start dateend date の各パラメーターに補間変数を使用します。以下に例を示します。

C:/logs/application_log_^DateRange("MM/dd/yyyy",@start_date,@end_date,"yyyy-MM-dd").log

このデータソースから作成した基本ビューには、2 つの追加フィールドとして start_dateend_date が存在し、それらの値で日付範囲が設定されます。以下に例を示します。

SELECT *
FROM bv_application_log
WHERE start_date = '01/01/2014' AND end_date = '03/31/2014'

このクエリを実行すると、2014 年第 1 四半期のログファイルがデータソースで処理されます。

パラメーターが補間変数の場合、二重引用符を付加する必要はありません。

例 3

ファイルのグループではなく、複数のディレクトリを参照するパスに ^DateRange を使用することもできます。

たとえば、毎日のログが命名規則 yyyyMMdd に従う個別のディレクトリに保存されている場合、データソースのパスを以下のように設定します。

C:/tmp/^DateRange("yyyy/MM/dd",@startdate,@enddate,"yyyyMMdd")

このデータソースから作成した基本ビューでは、指定した日付範囲に該当するすべてのディレクトリからすべてのファイルが読み取られます。