Talendで作成されたスキーマ定義を一括で変更したい

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Talendはデータソースに応じて自動でタイプを判断してくれるのですが、
判断された内容と実際に適用したタイプが大きく異なった場合、
UIから変更するとなると日が暮れてしまいます。
そういった時の一括で変更する方法のご紹介です。

作例

LinkDataで公開されている東急電鉄の駅のCSVファイルを区切り記号付きファイルとして取り込み、
スキーマ定義を変更していくことを目的とします。

スキーマ定義作成

東急電鉄の駅/TOKYU CORPORATION Stations|オープンデータ共有&ダウンロード|LinkDataより、
CSVファイルをダウンロードします。

CSVファイルは、"その他の形式のAPIリストを表示"から"CSV for a table"にて
ダウンロードが可能です。

メタデータ内の区切り記号付きファイルから区切り記号付きファイルを作成を選択し、
ダウンロードしてきたCSVファイルを取り込みます。

その際、今回は1行目がヘッダーのCSVファイルが対象なので以下の項目を設定しておく必要があります。

設定項目 設定内容
フィールドセパレータ Comma
列名として先頭行を設定 チェック

今回のCSVファイルには、該当のデータが無いので関係ありませんが、
必要に応じて、エスケープ文字の設定行う必要があります。

上記のように設定を行い、
プレビューを押下するとスキーマが問題なく作成できそうなプレビューが表示されます。 新規列区切り記号付きファイル

次へを押下すると、日本語で設定されていたカラムがColumn1といった形に変更されているので、
カラム名の変更とタイプもすべてStringに変えるのを今回の目標とします。 新規列区切り記号付きファイル_2

「終了」を押下してスキーマ定義の作成は完了させます。

エクスポート〜書き換え〜インポート

スキーマ定義の変更を実施するために、作成されたスキーマをエクスポートします。
エクスポートはエクスポートしたい項目を選択し右クリックをし、「項目のエクスポート」から行うことができます。

エクスポート去れたファイル自体は、単なるXMLファイルになります。
今回変更を実施したいスキーマの定義は以下に格納されていました。

(エクスポート時に選択したルートディレクトリ)/BLOGSAMPLE/metadata/fileDelimited/(スキーマ名).item

今回はLabelの修正とタイプの変更を行いたいので、以下のようにしました。

変更前

<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJTSV2EeW7qOQegIZAUQ" label="lat" length="9" precision="7" talendType="id_Float" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJTiV2EeW7qOQegIZAUQ" label="Column11" length="10" precision="7" talendType="id_Float" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJTyV2EeW7qOQegIZAUQ" label="seeAlso" length="50" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJUCV2EeW7qOQegIZAUQ" label="Column13" length="6" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJUSV2EeW7qOQegIZAUQ" label="Column14" length="6" talendType="id_Integer" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJUiV2EeW7qOQegIZAUQ" label="Column15" length="6" talendType="id_Integer" pattern=""dd-MM-yyyy""/>

変更後

<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJTSV2EeW7qOQegIZAUQ" label="lat" length="9" precision="7" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJTiV2EeW7qOQegIZAUQ" label="lng" length="10" precision="7" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJTyV2EeW7qOQegIZAUQ" label="seeAlso" length="50" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJUCV2EeW7qOQegIZAUQ" label="use_commuter_pass" length="6" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJUSV2EeW7qOQegIZAUQ" label="use_ticket" length="6" talendType="id_String" pattern=""dd-MM-yyyy""/>
<feature xsi:type="TalendMetadata:MetadataColumn" xmi:id="_FvjJUiV2EeW7qOQegIZAUQ" label="number_of_user" length="6" talendType="id_String" pattern=""dd-MM-yyyy""/>

インポートはインポートしたい個所(今回の場合は区切り記号付きファイル)で右クリックをし、
「Import items」を選択することで選択画面が表示されます。
その際、Overwrite exists items.にチェックを入れておくことで、エクスポートした定義が上書きされます。

変更前と変更後のmetadataは下記のようになります。

変更前

BeforeSchema

変更後

AfterSchema

先ほど書き換えたカラム名・タイプに変わっていることが確認できました。

小ネタ Vimでの最短一致の正規表現

今回の例でtalendTypeをid_Stringに置き換えました。
その際、Vimでの置き換えで実施しようとしたのですが、最短表示の記載方法が独自だったので共有。
Vimで上記のようなtalendTypeをid_Stringに置き換える正規表現は下記のようになります。

%s/talendType=".\{-}"/talendType="id_String"/c

まとめ

Talendはスキーマの定義を自動でやってくれるので、非常に便利なのですが、
一括で何か項目を変えるといった際に一括で変更するといった項目がありませんでした。
エクスポートしてしまえばただのXMLなので、一括で変更を実施するといった際に容易に行うことができそうです。
一括で変更したいといった際に、この記事が皆様の一助になれば幸いです。

参考サイト

トピック: スキーマ編集について | Talend japan community
vimの正規表現で最短マッチ - Webtech Walker