JP6773708B2 - データ移行システム及びデータ移行サーバ - Google Patents

データ移行システム及びデータ移行サーバ Download PDF

Info

Publication number
JP6773708B2
JP6773708B2 JP2018057121A JP2018057121A JP6773708B2 JP 6773708 B2 JP6773708 B2 JP 6773708B2 JP 2018057121 A JP2018057121 A JP 2018057121A JP 2018057121 A JP2018057121 A JP 2018057121A JP 6773708 B2 JP6773708 B2 JP 6773708B2
Authority
JP
Japan
Prior art keywords
execution log
relationship
sql statement
unit
database server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018057121A
Other languages
English (en)
Other versions
JP2019169001A (ja
Inventor
淳平 大越
淳平 大越
近藤 伸和
伸和 近藤
渡辺 聡
聡 渡辺
馬場 恒彦
恒彦 馬場
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2018057121A priority Critical patent/JP6773708B2/ja
Publication of JP2019169001A publication Critical patent/JP2019169001A/ja
Application granted granted Critical
Publication of JP6773708B2 publication Critical patent/JP6773708B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、データ移行システム及びデータ移行サーバに関する。
近年、データレイクと呼ばれる複数のデータベースのデータを一元的に集約し、種々の目的に活用するデータ処理基盤が注目されている。このデータレイクにデータを移行する技術は、例えば、Apache Sqoop(非特許文献1)に開示されている。
一部のデータレイクは、SQLと呼ばれるリレーショナルデータベースで用いられる問い合わせ言語を用いて、格納されたデータを処理する機構を備える。例えば、Apache Hadoop及びApache Hiveを備えたデータレイクでは、HiveQLと呼ばれるSQLに類似した言語を用いて、データを処理する。
Apache Sqoop[Online]、「平成30年2月8日検索」、インターネット<https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html>
しかし、Apache Sqoopによるデータベースの移行では、移行元となるデータベースのテーブル名と、移行先のデータレイクにおけるテーブル名とを明示的に指定する必要がある。
このため、例えば、定期的にデータベースのテーブルをデータレイクに集約する環境で、移行元のデータベースのテーブルにカラムが追加された場合、データレイクでは異なるテーブル名でデータを登録して管理する必要が生じる。
複数のファイルを一つにまとめるアーカイブ用途では、アーカイブ時刻を接尾辞として付加することでデータを区別することが一般に行われるため、同様にテーブルの管理が必要となる。
このように、移行元のデータベースのテーブルと、移行先のデータレイクのテーブルが一対一で対応しない場合が頻繁に生じる。このため、データレイクを利用するユーザは、すべてのテーブルの変更を把握した上で、各テーブルに対しSQLを発行しなければならず工数を要する。
さらに、SQLを用いてデータレイクにアクセスするプログラムの開発においても、各テーブルの変更を考慮したSQLを発行する必要があるため、プログラムの開発に工数を要するという。
本発明の目的は、移行元のデータベースのテーブルと移行先のデータレイクのテーブルが一対一で対応しない場合でも、データレイクに対するSQLを用いた問い合わせを低工数で実現することにある。
本発明の一態様のデータ移行システムは、第1のデータベースサーバと移行サーバと第2のデータベースサーバとがネットワークを介して接続され前記ネットワークを経由してデータの送受信を相互に行い、前記第1のデータベースサーバから前記第2のデータベースサーバに前記移行サーバを介して前記データを移行させるデータ移行システムであって、前記第1のデータベースサーバは、実行されたSQL文を指す実行ログと所定のテーブルを格納し、前記移行サーバは、前記第1のデータベースサーバに格納されている前記実行ログを取得する実行ログ取得部と、前記実行ログから前記第1のデータベースサーバに格納されている前記テーブルの変更に関わる前記実行ログを関係実行ログとして抽出する関係実行ログ抽出部と、前記関係実行ログを用いて前記第2のデータベースサーバに格納されたデータ間の関係を関係情報として生成する関係情報生成部とを有することを特徴とする。
本発明の一態様のデータ移行サーバは、実行されたSQL文を指す実行ログと所定のテーブルを格納した第1のデータベースサーバから第2のデータベースサーバにデータを移行させるデータ移行サーバであって、前記第1のデータベースサーバに格納されている前記実行ログを取得する実行ログ取得部と、前記実行ログから前記第1のデータベースサーバに格納されている前記テーブルの変更に関わる前記実行ログを関係実行ログとして抽出する関係実行ログ抽出部と、前記関係実行ログを用いて前記第2のデータベースサーバに格納されたデータ間の関係を関係情報として生成する関係情報生成部とを有することを特徴とする。
本発明の一態様によれば、移行元のデータベースのテーブルと移行先のデータレイクのテーブルが一対一で対応しない場合でも、データレイクに対するSQLを用いた問い合わせを低工数で実現することができる。
実施例のデータ移行システムの構成を示す図である。 実施例のハードウェア構成を示す図である。 データの移行処理を示すシーケンス図である。 関係情報生成処理およびビュー生成処理を示すシーケンス図である。 実行ログの例を示す図である。 図5のSQL文の実行により生じるテーブルの変更を示す図である。 操作リストを示す図である。 操作パターンを特定するフローチャートを示す図である。 データレイクに格納されたテーブルの例を示す図である。 テーブルに対する操作パターンの定義を示す図である。 生成された関係情報の例を示す図である。 ビューを生成するためのSQL文を生成するフローチャートを示す図である。 関係実行ログの存在するテーブルに対し、ビューを生成するSQL文を生成するためのフローチャートを示す図である。 ビューをユーザが定義するためのディスプレイ表示の例を示す図である。 図13のフローチャートによりビューを生成するためのSQL文が生成される様子を示す図である。 実施例の効果の一例を示す図である。
以下、実施例を図面を用いて説明する。
<システム構成>
図1を参照して、実施例のデータ移行システムの構成について説明する。
データベースサーバ(第1のデータベースサーバ)101は、SQL実行部102とストレージ103を有する。ストレージ103には、テーブル定義104、テーブル105及びSQLの実行ログ106が格納される。
移行サーバ107は、実行制御部108、テーブル取得部109、テーブル変換部110、テーブル登録部111、ビュー定義取得部112、関係情報生成部113、ビュー生成式生成部114、ビュー登録部115、テーブル定義取得部116、テーブル定義変換部117、テーブル定義登録部118、実行ログ取得部119、関係実行ログ抽出部120、関係実行ログ管理部121及びストレージ122を有する。ストレージ122には、関係実行ログ123、操作パターン124、操作リスト125、関係情報126及び接尾辞一覧127が格納される。
データレイク(第2のデータベースサーバ)128は、SQL実行部129とストレージ130を有する。ストレージ130には、ビュー131、テーブル定義132及びテーブル133が格納される。
<ハードウェア構成>
図2を参照して、実施例のデータ移行システムのハードウェア構成について説明する。
データベースサーバ101、移行サーバ107及びデータレイク128は、ネットワーク201を介して接続され、ネットワーク201を経由してデータの送受信を相互に行う。
データベースサーバ101は、CPU(Central Processing Unit)202、メモリ203、NIC(Network Interface Card)204、ストレージ103及びバス205により構成される。メモリ203には、SQL実行部102が格納されている。CPU202は、メモリ203からバス205を経由してアプリケーションの実行コードを読み込み、アプリケーションを実行する。CPU202は、バス205を経由してメモリ203及びストレージ103に対してデータの読み書きを実行することができる。
CPU202は、バス205及びNIC204を経由して、ネットワーク201に接続された移行サーバ107及びデータレイク128とデータの送受信を行うことができる。
移行サーバ107は、CPU(Central Processing Unit)206、メモリ207、NIC(Network Interface Card)208、ストレージ122及びバス209により構成される。
さらに、移行サーバ107は、ユーザとのデータの入出力のため、マウス210、ディスプレイ211及びキーボード212を備える。メモリ207には、実行制御部108、テーブル取得部109、テーブル変換部110、テーブル登録部111、ビュー定義取得部112、関係情報生成部113、ビュー生成式生成部114、ビュー登録部115、テーブル定義取得部116、テーブル定義変換部117、テーブル定義登録部118、実行ログ取得部119、関係実行ログ抽出部120、関係実行ログ管理部121が格納されている。
CPU206は、CPU202と同等の機能を有する。CPU206は、マウス210及びキーボード212の操作情報を受信し、バス209を経由してメモリ207及びストレージ122に対してデータの読み書きを実行したり、メモリ207に格納されたアプリケーションを制御したりすることができる。CPU206は、ディスプレイ211を介して、ユーザに情報を表示することができる。
データレイク128は、CPU(Central Processing Unit)215、メモリ214、NIC(Network Interface Card)213、ストレージ130及びバス216により構成される。メモリ214には、SQL実行部129が格納されている。CPU215は、CPU202と同等の機能を有する。
<データ移行処理>
図3を参照して、データの移行処理について説明する。
初期状態では、移行サーバ107に配置されたメモリ207上で、実行制御部108が動作している。実行制御部108は、定期的な時刻を契機として、システム時刻を文字列として取得する。移行対象となるテーブルに付加する接尾辞(例えば、年に一度の実行であれば「_2017」からなる文字列)302を生成し、テーブル定義取得部116に接尾辞302を含むテーブル定義取得要求301を送信し、テーブル取得部109に接尾辞302を含むテーブル取得要求309を送信し、ストレージ122に格納された接尾辞一覧127に接尾辞302を追記し、次の契機まで待機する。
契機は、人手による手動実行でも良いし、他のアプリケーションからの命令であっても良い。接尾辞302は、接頭辞あるいは移行先のデータレイク128において同名のテーブルが存在するなどの不整合が生じなければ任意の文字列でも良い。
テーブル定義取得部116は、実行制御部108から送信されたテーブル定義取得要求301を受信し、テーブル名の一覧を取得するSQL文を生成し、生成したSQL文を含むテーブル一覧取得命令303をデータベースサーバ101のSQL実行部102に送信する。テーブルの一覧は、一般に以下の様なSQL文[1]により取得することができる。
¥dt; [1]
SQL実行部102は、テーブル定義取得部116から送信されたSQL文[1]を含むテーブル一覧取得命令303を受信し、受信したSQL文を実行してストレージ103に格納されたテーブル定義104からテーブル名の一覧であるテーブル一覧304を生成し、テーブル定義取得部116に送信する。
テーブル定義取得部116は、SQL実行部102から送信されたテーブル一覧304を受信し、受信したテーブル一覧304に含まれる各テーブルに対して、テーブル定義を生成するSQL文を生成し、生成したSQL文を含むテーブル定義取得命令305をSQL実行部102に送信する。
テーブル定義は、一般に以下の様なSQL文[2]により取得することができる(table_name)にテーブル定義を取得したいテーブル名を指定する)。
¥d table_name; [2]
SQL実行部102は、テーブル定義取得部116から送信されたSQL文を含むテーブル定義取得命令305を受信し、SQL文を実行してストレージ103に格納されたテーブル105に対応したテーブル定義306を取得し、取得したテーブル定義306をテーブル定義取得部116に送信する。
送受信されるテーブル定義306には、テーブル名、テーブルが含まれるデータベース名、テーブルに含まれるカラム名及び各カラムの型の情報が含まれる。必要に応じて一部のデータが欠落していても良いし、他のデータ(例えば、所有者や作成者に関わる情報)が付加されていても良い。
テーブル定義取得部116は、SQL実行部102から送信されたテーブル定義306を受信し、受信したテーブル定義306及び受信したテーブル取得要求301に含まれる接尾辞302をテーブル定義変換部117に送信する。
テーブル定義変換部117は、受信したテーブル定義306をデータレイク128で解釈可能なテーブル定義に変換し、テーブル名に接尾辞302を付加し、変換済みテーブル定義307としてテーブル定義登録部118に送信する。このテーブル定義の変換は、移行元のデータベースサーバ101が備えるSQL実行部102と移行先のデータレイク128が備えるSQL実行部129の解釈できるSQL文、特にカラムの型が異なるために必要となる。
この処理は、例えば、移行元のデータベースサーバ101において数値をFloat型として扱っており、移行先のデータレイク128において対応する型がNumeric型であるような場合に必要となる。変換処理は、対応する型を規則とて保持することにより自動変換しても良いし、ユーザに対し変換処理の入力をマウス210、ディスプレイ211及びキーボード212を介して求めても良い。
テーブル定義登録部118は、テーブル定義変換部117から送信された変換済みテーブル定義307を受信し、受信した変換済みテーブル定義307からデータレイク128でテーブルを定義するためのSQL文を生成し、データレイク128のSQL実行部129に対し生成したSQL文を含むテーブル定義格納命令308を送信する。生成されるSQL文は、多くの場合、「CREATE TABLE」から始まるSQL文となる。例えば、データベースサーバ101から取得したテーブル定義306のテーブル名が「強度試験」、接尾辞302が「_2017」である場合、データレイク128に格納されるテーブル名は「強度試験_2017」となる。
SQL実行部129は、テーブル定義登録部118から送信されたテーブル定義格納命令308を受信し、命令に含まれるSQL文を実行し、ストレージ130にテーブル定義132として格納する。
テーブル取得部109は、実行制御部108から送信されたテーブル取得要求309を受信し、テーブルの一覧を取得するSQL文を生成し、生成したSQL文を含むテーブル一覧取得命令311を、データベースサーバ101のSQL実行部102に送信する。生成されるSQL文は、例えば、テーブル一覧取得命令303に含まれるSQL文が挙げられる。
SQL実行部102は、テーブル取得部109から送信されたテーブル一覧取得命令(310)を受信し、命令に含まれるSQL文を実行し、ストレージ103に含まれるテーブル定義104からテーブル名の一覧をテーブル一覧311として生成し、テーブル取得部109に送信する。
テーブル取得部109は、SQL実行部102から送信されたテーブル一覧311を受信し、テーブル一覧311に含まれる各テーブルに対し、テーブルのデータ(レコードの集合)を取得するためのSQL文を生成し、SQL実行部102に対し生成したSQL文を含むテーブル取得命令312を送信する。生成されるSQL文は、例えば、テーブルをカンマ区切りのテキスト(CSV、Comma−separated Values)で出力する「COPY TO」から始まるSQL文が挙げられる。
SQL実行部102は、テーブル取得部109から送信されたテーブル取得命令312を受信し、受信したSQL文を実行することで出力するテーブル313を生成し、生成したテーブル313をテーブル取得部109に送信する。
テーブル取得部109は、SQL実行部102から送信されたテーブル313を受信し、実行制御部108から送信された接尾辞302とともに、テーブル変換部110に送信する。
テーブル変換部110は、テーブル取得部109から送信されたテーブル313と接尾辞302を受信し、受信したテーブル313に接尾辞302を付加しファイル名とし、データレイク128のSQL実行部129が解釈可能なテーブルに変換し、変換済みテーブル314としてテーブル登録部111に送信する。このテーブルの変換は、受信したテーブル313と移行先のデータレイク128の備えるSQL実行部129の解釈できるテーブルに相違がある場合に必要となる。もしくは、性能向上などの目的においても必要となる場合がある。この処理は、例えば、出力されたCSVの改行コードの変換や、CSVの区切り文字「,」の別の文字への変換などが挙げられる。この処理は、変換規則をあらかじめ規定して自動変換しても良いし、ユーザに対し変換処理の入力をマウス210、ディスプレイ211及びキーボード212を介して求めても良い。
テーブル登録部111は、テーブル変換部110から送信された変換済みテーブル314を受信し、データレイク128のSQL実行部129が解釈可能なテーブルを登録するためのSQL文を生成し、生成したSQL文を含むテーブル格納命令315として送信する。この際、生成されるSQL文は、前述のテーブル定義格納命令308で格納されたテーブル定義と整合させ、テーブル定義格納命令308で指定されたテーブル名とデータ格納命令315で格納されるテーブルを一対一で対応させる。
また、生成されるSQL文は、例えば、テーブルをデータベースにコピーする「COPY FROM」文が挙げられる。
SQL実行部129は、テーブル登録部111から送信されたテーブル格納命令315を受信し、命令に含まれるSQL文を実行し、ストレージ130に変換済みテーブル314を格納する。変換済みテーブル314は、移行サーバ107からネットワークを経由して読み込んでも良いし、テーブル格納命令315に含めても良い。
<関係情報生成処理>
実施例では、データベースサーバ101のストレージ103に格納された実行ログ106を取得し、テーブルの変更(例えば、テーブル・カラムの追加・削除、テーブル名・カラム名の変更)に関わる実行ログを関係実行ログとして抽出し、抽出した関係実行ログを解析することで、データベースサーバ101のストレージ103に格納されたテーブル105に対する操作パターン(例えば、テーブルの結合・分割)を特定し、テーブル名、実行ログ及び操作パターンを含む情報を関係情報として生成する。以下、その処理の詳細について説明する。
図4を参照して、関係情報生成処理について説明する。
実行制御部108は、図3に示したデータ移行処理の終了を契機として、実行ログ取得要求401を生成し、実行ログ取得部119に対して生成した実行ログ取得要求401を送信する。
実行ログ取得部119は、実行制御部108から送信された実行ログ取得要求401を受信し、データベースサーバ101のストレージ103に格納された実行ログ106を取得し、取得した実行ログ106から移行サーバ107のストレージ122に格納された関係実行ログ123と一致する実行ログを除外し、関係実行ログ抽出部120に抽出された実行ログ402を送信する。
実施例では、実行ログはデータベースサーバ101のSQL実行部102において実行されたSQL文を指す。図5は、実行ログ取得部119から関係実行ログ抽出部120に送信される実行ログ402の例を示す。また、図6は、図5に示した実行ログ402により、テーブルが変更される様子を示す。この実行ログ402では、2つのSQL文が実行されている。「ALTER」から最初の「int;」までが1つ目のSQL文(501)であり、「強度試験」テーブル(601)に対し、「圧縮強度」カラム(603)を追加するSQL文である。
「UPDATE」から最後の「);」までが2つ目のSQL文502であり、1つ目のSQL文501で追加した「強度試験」テーブル601の「圧縮強度」カラム(603)に、「強度試験_圧縮強度」テーブル602の「圧縮強度」カラム606の値を挿入している。2つ目のSQL文(502)の「WHERE」以降の「”強度試験”.”試験ID”=”強度試験_圧縮強度”.”試験ID”」は挿入の条件を指定しており、この場合、「強度試験」テーブル601の「試験ID」カラム604の値と、「強度試験_圧縮強度」テーブル602の「試験ID」カラム605の値が一致することを条件に値を挿入する。
関係実行ログ抽出部120は、実行ログ取得部119から送信された実行ログ402を受け取り、実行ログ402の各SQL文を操作リスト125と照合し、構文が一致するSQL文を関係実行ログ403として抽出し、抽出された関連実行ログ403を関係実行ログ管理部121及び関係情報生成部113に送信する。
図7は、操作リスト125の例を示す。操作リスト125は、データベースサーバ101のストレージ103に格納された、テーブル105への操作に関連したSQL文の構文が列挙されている。関係実行ログ抽出部120は、実行ログ402に含まれるSQL文と操作リスト125に記載されたSQL構文の一致を判定し、判定対象のSQL文が、いずれかのSQL構文に一致していればそのSQL文が関係実行ログであると判断する。
例えば、1つ目のSQL文501は操作リスト125に記載された操作「カラム追加」701に該当するため、関係実行ログとして抽出される。また、2つ目のSQL文502は、操作「レコードの更新」に該当するため、同じく関係実行ログとして抽出される。操作リスト125における操作702は、図7に列挙されたものに限定されるものではなく、テーブルの変更を伴うSQLの構文であれば漏れなく列挙されて良い。
関係実行ログ管理部121は、関係実行ログ抽出部120より送信された関係実行ログ403を受信し、移行サーバ107のストレージ122に受信した関係実行ログ403を蓄積する。本機能により、例えば、データベースサーバ101における実行ログ106のライフサイクル管理により、実行ログ106が削除、もしくは別システムに移動された場合においても、過去の関係実行ログを処理することが可能となる。また、関係実行ログのみを蓄積することで、テーブルの読み込みなど、テーブルの操作に関係しない実行ログを除外することが可能となり、ストレージ122を容量の観点で効率的に扱うことが可能となる。
関係情報生成部113は、関係実行ログ抽出部120から送信された関係実行ログ403を受信し、データ移行サーバ107のビュー定義取得部112にビュー一覧取得要求404を送信し、データ移行サーバ107のテーブル定義取得部116にテーブル一覧取得要求405を送信する。
ビュー定義取得部112は、関係情報生成部113から送信されたビュー一覧取得要求404を受信し、ビュー一覧を取得するSQL文を生成し、データレイク128のSQL実行部129に生成したSQL文を含むビュー一覧取得命令406を送信する。一般に、ビュー一覧は以下の様なSQL文により取得することができる。
dv; [3]
SQL実行部129は、ビュー定義取得部112から送信されたビュー一覧取得命令406を受信し、ビュー一覧取得命令406に含まれるSQL文を実行し、データレイク128のストレージ130に格納されたビュー131からビュー一覧407を生成し、生成したビュー一覧407を関係情報生成部113に送信する。
送受信されるビュー一覧407には、ビュー名及びビューが含まれるデータベース名が含まれる。必要に応じて一部のデータが欠落していても良いし、他のデータ(例えば、所有者や作成者に関わる情報)が付加されていても良い。
テーブル定義取得部116は、関係情報生成部113から送信されたテーブル一覧取得要求405を受信し、テーブル一覧を取得するSQL文を生成し、データレイク128のSQL実行部129に生成したSQL文を含むテーブル一覧取得命令408を送信する。一般に、テーブル一覧は以下の様なSQL文[4]により取得することができる。
dt; [4]
SQL実行部129は、テーブル定義取得部116から送信されたテーブル一覧取得命令408を受信し、受信したテーブル一覧取得命令408に含まれるSQL文を実行し、データレイク128のストレージ130に格納されたテーブル定義132からテーブル一覧409を生成し、生成したテーブル一覧409をテーブル定義取得部116に送信する。
テーブル定義取得部116は、SQL実行部129から送信されたテーブル一覧409を受信し、受信したテーブル一覧409を関係情報生成部113に送信する。
送受信されるテーブル一覧409には、テーブル名及びテーブルが含まれるデータベース名が含まれる。必要に応じて一部のデータが欠落していても良いし、他のデータ(例えば、所有者や作成者に関わる情報)が付加されていても良い。
関係情報生成部113は、ビュー定義取得部112から送信されたビュー一覧407及びテーブル定義取得部116から送信されたテーブル一覧409を受信し、図8に示す操作パターン特定フローを実行する。
以下、図8に示す操作パターン特定フローの動作を説明する。
ステップ801では、テーブル定義取得部116から送信されたテーブル一覧409を受信し、受信したテーブル一覧409からデータ移行処理で付加した接尾辞に関して、最新の接尾辞が付加されたテーブルを抽出し、接尾辞を取り除きデータ移行処理によって移行された最新のテーブル一覧を生成する。
図9は、データレイク128のストレージ130に格納されたテーブル133の例である。これらのテーブルは、図6に示したテーブルの移行処理によって生成され、図6の「強度試験」テーブル601は図9の「強度試験_2015」テーブル901に、図6の「強度試験_圧縮強度」テーブル602は図9の「強度試験_圧縮強度_2015」テーブル902に、図6の「強度試験」テーブル607は図9の「強度試験_2016」テーブル903に、図6の「強度試験_圧縮強度」テーブル608は図9の「強度試験_圧縮強度_2016」テーブル904の移行データにそれぞれ対応する。
本ステップにより、最新の接尾辞が付加された「強度試験_2016」テーブル903及び「強度試験_圧縮強度_2016」テーブル904が抽出され、接尾辞が取り除かれることにより、「強度試験」及び「強度試験_圧縮強度」が生成される。
ステップ802では、関係実行ログ抽出部120から送信された関係実行ログ403に含まれる実行ログにおいて、操作リスト125のtable_nameに該当するテーブル名と前ステップで抽出されたテーブル名との一致を判定することにより、前ステップで抽出されたテーブル名とそのテーブルに関わる関係実行ログの対応を取る。例えば、図5のSQL文(501、502)において、table_nameに該当するテーブル名は「強度試験」であり、前ステップで抽出された「強度試験」にそれぞれ対応する。
ステップ803では、各テーブルに対応した関係実行ログとストレージ122に格納された操作パターン124とを照合し、構文の一致を判定することでテーブルに対する操作パターンを特定する。図10に操作パターン124を示す。操作パターン124は、操作パターン1001とSQL構文1002の対応関係からなるテーブルである。
実施例において、操作パターンとは、テーブルに対して別のテーブルのカラムを加えるといった、ある目的を達成するために実行される1文以上のSQL文の連なりを指す。図7に示した操作リスト(125)との違いは、操作リスト125の操作とSQL構文が一対一で対応することに対し、各操作パターン1001は1文以上のSQL構文の連なりに対応する点である。
例えば、テーブルの水平分割1003であれば、2つの「CREATE TABLE」文により、「old_table_name」で指定されたテーブルから2つのテーブル「new_table_name_1」及び「new_table_name_2」を生成する。さらに、「DROP TABLE」文により、「old_table_name」で指定されたテーブルを削除する。
また、操作パターン1001は、複数のSQL構文の連なりにより定義されても良い。例えば、カラム追加(1004)であれば、「ALTER TABLE」文のみでカラムを追加し値を挿入しなかった場合1005と、「ALTER TABLE」文の実行後に「UPDATE」文により「column_name」で指定されるカラムに値を挿入した場合1006の2つが定義されている。操作パターン1001の定義は、図10に限定されるものではなく、必要に応じて自由に拡張・縮小することができる。また、正規表現を用いてより複雑なSQL構文を操作パターンとして定義しても良いし、複数の操作パターンを組み合わせて新たな操作パターンを定義しても良い。
ステップ804では、前ステップにおいて、操作パターンを特定できたか判定する。特定できた場合、ステップ805に移る。特定できない場合、ステップ806に移る。
ステップ805では、テーブル名、関係実行ログ及び特定した操作パターンを含む情報を関係情報410として生成し、ストレージ122に格納する。この関係情報には、必要に応じて生成時刻と言った付加的な情報を含んで良い。
図11に、本ステップにより生成された関係情報410の例を示す。この例では、特定された操作パターンはカラム追加(1101)、関係実行ログは「ALTER TABLE」文及び「UPDATE」文の2つ1102、テーブル名は「強度試験」1103の組が関係情報として生成されている。
ステップ806では、操作パターンの特定失敗として、ディスプレイ211を通してテーブル名、対応する関係実行ログを提示する。さらに、マウス210及びキーボードを介してユーザに新たな操作パターン1001の定義を求めても良い。
関係情報生成部113は、図8に示した操作パターン特定フローの実行後、生成した関係情報410、ビュー一覧407及びテーブル一覧409を含むビュー生成命令411をビュー生成式生成部114に送信する。
<ビュー生成処理>
ビュー生成式生成部114は、関係情報生成部113から送信されたビュー生成命令411を受信し、図12に示したビュー生成式生成フローを実行する。以下、図12のビュー生成式生成フローについて説明する。
ステップ1201では、ビュー生成命令411に含まれるテーブル一覧409から最新の接尾辞を有するテーブルを抽出し、最新のテーブルに対するビューを生成するSQL文を生成する。
図9を例に説明すると、最新の接尾辞を有するテーブルは「強度試験_2016」テーブル903及び「強度試験_圧縮強度_2016」テーブル904の2つである。これらのテーブルに対し、ビューを生成するため、以下に示すSQL文([5]及び[6])を生成する。ビュー名は、テーブル名にテーブルとビュー名を区別するための接頭辞である「v_」を付加し、最新の接尾辞「_2016」をさらに付加することで生成する。
「CREATE VIEW」句は、テーブルとビューを区別するため、接頭辞として「v_」を付加し、最新の接頭辞をさらに付加することで生成されたビュー名を含めることで生成する。「SELECT」句及び「FROM」句は、抽出されたテーブル名とそのテーブルに含まれるすべてのカラムを指定することで生成する。この処理により、最新の接尾辞を有するテーブルに一対一で対応し、かつ同じカラム構造を有するビューが生成される。
CREATE VIEW “v_強度試験_2016_2016” AS
SELECT * FROM “強度試験_2016”; [5]
CREATE VIEW “v_強度試験_圧縮強度_2016_2016”AS
SELECT * FROM “強度試験_2016”; [6]
なお、実施例の運用が2015年より開始され、図9に示したテーブルがデータレイク128のストレージ130に格納されている状況を想定すると、2015年のビュー生成処理おいて、本ステップが実行されることにより、「v_強度試験_2015_2015」及び「v_強度試験_圧縮強度_2015_2015」の2つのビューが生成されていることとなる。以下、その想定にて説明を継続する。
ステップ1202では、前ステップで抽出された最新の接尾辞を有するテーブル名から、接尾辞を取り除いたテーブル名を生成し、その中から関係情報410に含まれるテーブル名を除いたテーブル名(すなわち、前回のデータ移行処理からテーブルに変更の生じなかったテーブル)に対し、過去のテーブルのビューを生成するためのSQL文を生成する。
具体的に図9の例で説明する。まず、前ステップにおいて、最新の接尾辞を有するテーブル名である「強度試験_2016」903及び「強度試験_圧縮強度_2016」904が抽出され、接尾辞を取り除くことでテーブル名「強度試験」及び「強度試験_圧縮強度」が得られる。その中から、関係情報410に含まれる「強度試験」を取り除き、「強度試験_圧縮強度」を得る。この「強度試験_圧縮強度」の過去のテーブル、すなわち、「強度試験_圧縮強度2015」に対するビューを生成するためのSQL文を本ステップにて生成する。生成するSQL文は、前ステップと同様の命名規則により、接頭辞として「v_」、接尾辞として「_2016」が付加された文字列をビュー名とする以下のSQL文[7]となる。
CREATE VIEW “v_強度試験_圧縮強度_2015_2016” AS
SELECT * FROM “強度試験_2015”; [7]
図9の例では、2015年までのテーブルしかないが、それより前のテーブルが存在する場合、同様に「v_強度試験_圧縮強度_2014_2016」のビューを「強度試験_圧縮強度_2014」テーブルから生成する。また、過去のテーブルが存在しなくなるまでその処理を継続する。
ステップ1203では、前ステップにて関係実行ログの存在しないテーブルに対し、ビューが生成された。本ステップでは、関係実行ログの存在する過去のテーブル(図9では、「強度試験」テーブル)に対し、ビューを生成するSQL文を生成する。このステップは、図10で示した操作パターン1001のSQL構文ごとに定義されている。図9および図11で示されたテーブル構造及び関係情報の場合は、操作パターン1001の一つであるカラム追加1004うち、2つのSQLよりなる構文1006に対応したフローが実行される。
図13は、構文1006に対応したフローを示している。以下、本ステップで生じる処理として図13の処理フローを説明する。また、そのときにSQL文が生成される様子を図15に示す。
ステップ1301では、関係情報よりテーブル名を抽出し、ビューとして「v_」を接頭辞として付加し、最新の接尾辞「-_2016」及び1期前の接尾辞「_2015」よりビューの接尾辞「_2015_2016」を生成し、それぞれを連結することによりビュー名「v_強度試験_2015_2016」を生成し、「CREATE VIEW」の行を生成する。
ステップ1302では、前ステップで生成されたビュー名の最新の接尾辞を1期前の接尾辞に変換することにより第一のテーブル名を生成し「.*」を付加することで1期前のビューに含まれる全カラムを選択対象とする式を生成し、関係実行ログの1つ目のSQL式より追加されたカラム名を抽出し、それらを並べることによりSELECT行を生成する。
ステップ1303では、前ステップで生成したビュー名、及び関係実行ログの2つ目のSQL式のFROM文で指定されたテーブル名に対し、ステップ1およびステップ2と同様の処理を加えることでビュー名「v_強度試験_圧縮強度_2015_2015」を生成し、それらを並べることでFROM行を生成する。
ステップ1304では、関係実行ログ2行目に含まれるWHERE文で指定された各テーブルに対し、ステップ1およびステップ2と同様の処理を加えることでWHERE行を生成する。
ステップ1305では、データレイク(128)に格納された2期以上前のテーブルに対し、1期前のテーブルと同様にビューを生成するためのSQL文を生成する。図9の例では1期前のデータしか存在しないため、この処理はスキップされる。2期以上前のデータが存在する場合は、図14に示したフローと同様に関係情報、接尾辞情報からビューを生成するSQL文を生成する。
図8におけるステップ804において、操作パターンが特定できなかった場合、ステップ1305において、操作パターンを特定できなかった関連実行ログに対するビューの生成式をマウス210、ディスプレイ211及びキーボード212を介してユーザに求めても良い。
図14は、その際のディスプレイ211の表示を示している。ディスプレイ211には、関係実行ログから抽出されたテーブル名1401、関係実行ログ1402(関係実行ログ403の一部)及びユーザが対話的にビューの生成式を入力する対話的入出力ウインドウ1403を備えている。
ビュー生成式生成部114は、生成したSQL文を含むビュー生成式412をビュー登録部115に送信する。ビュー登録部115は、ビュー生成式生成部114から送信されたビュー生成式412を受信し、受信したビュー生成式412に含まれるSQL文を含むビュー生成命令415をデータレイク128のSQL実行部129に送信する。
SQL実行部129は、ビュー登録部115から送信されたビュー生成命令415を受信し、ビュー生成命令415に含まれるSQL文を実行し、SQL文の実行により生成されたビューをストレージ130に格納する。
以上の関係情報生成部113による関係情報410の生成処理及びビュー生成式生成部114とビュー登録部115によるビューの生成処理により得られる効果を図16を用いて説明する。
データ移行処理により、データレイク128に「強度試験_2015」テーブル(901及び「強度試験_圧縮強度_2015」テーブル902が生成される。ウインドウ1601、1602、1603における「#」以降がテーブルやビューのデータを可視化するために実行したSQL文である。
図16の例では、各テーブルに試験IDが「2015001」であるレコードがそれぞれ含まれている。まず、2015年におけるデータ移行処理およびビュー生成処理により、「v_強度試験_2015_2015」1604及び「v_強度試験_圧縮強度_2015_2015」1605の2つのビューが生成される。その後、2016年のデータ移行処理により「強度試験_2016」テーブル903及び「強度試験_圧縮強度_2016」テーブル904が生成される(図中では2015年のテーブル、及びそれに関わるビューのみ記載)。
さらに、ビュー生成処理により、「v_強度試験_2016_2016」及び「v_強度試験_圧縮強度_2016_2016」が生成される。この時、「強度試験_2016」テーブルにはカラムとして「試験ID」、「計測時刻」、「引張強度」、及び「圧縮強度」が記載されている。一方で、「強度試験_2015」には、カラムとして「試験ID」、「計測時刻」、「引張強度」が記載されている。このため、2015年のデータと2016年のデータから圧縮強度を取得したいユーザは、まず、データベース管理者に対しテーブルの変更に関わる情報を取得し、テーブルの構造及び変更履歴をもれなく把握する。さらに、各年のテーブルからデータを取得するために各年のテーブル構造に依存したSQLを発行するアプリケーションを開発する必要が生じるため、工数を要するという課題があった。
実施例によれば、ビュー生成処理により「v_強度試験_2015_2016」ビュー1606が生成される。このビューは、図13のビュー生成式生成処理により生成されており、「v_強度試験_2015_2015」ビュー1604及び「v_強度試験_圧縮強度_2015_2015」ビュー1605のカラムを参照している。また、「v_強度試験_2015_2016」ビュー1606のカラムは、「v_強度試験_2016_2016」ビューのカラムと一致する。このビュー及び「v_強度試験_2016_2016」を用いることで、ユーザは2016年に移行されたテーブルを把握するのみで、過去のデータを接尾辞を変えるだけでアクセスすることが可能となる。
図16では、「v_強度試験_2015_2016」ビュー1606に対し、「SELECT * FROM “v_強度試験_2015_2016”」というSQLを発行している1603。「強度試験_2015」901や「v_強度試験_2015_2015」1604には、カラムとして「圧縮強度」が含まれていないため、「強度試験_圧縮強度_2015」902に含まれる「圧縮強度」は取得できない。しかし、ビュー生成処理により間接的に「強度試験_圧縮強度_2015」テーブル902のカラムを参照するビューを生成することで「強度試験_2016」テーブル903と同じ構造を持ったデータとして2015年のデータを扱うことが可能となる。
このため、実施例によれば、ユーザがテーブル構造をもれなく把握する必要がなくなり、アプリケーションの開発においても対象ビューの接尾辞を機械的に変更することで過去のデータを取得・処理することが可能となる。この結果、データの理解やアプリケーションの開発に要していた工数を削減することができる。
101 データベースサーバ
102 SQL実行部
103 ストレージ
104 テーブル定義
105 テーブル
106 実行ログ
107 移行サーバ
108 実行制御部
109 テーブル取得部
110 テーブル変換部
111 テーブル登録部
112 ビュー定義取得部
113 関係情報生成部
114 ビュー生成式生成部
115 ビュー登録部
116 テーブル定義取得部
117 テーブル定義変換部
118 テーブル定義登録部
119 実行ログ取得部
120 関係実行ログ抽出部
121 関係実行ログ管理部
122 ストレージ
123 関係実行ログ
124 操作パターン
125 操作リスト
126 関係情報
127 接尾辞一覧
128 データレイク
129 SQL実行部
130 ストレージ
131 ビュー
132 テーブル定義
133 テーブル

Claims (14)

  1. 第1のデータベースサーバと移行サーバと第2のデータベースサーバとがネットワークを介して接続され前記ネットワークを経由してデータの送受信を相互に行い、前記第1のデータベースサーバから前記第2のデータベースサーバに前記移行サーバを介して前記データを移行させるデータ移行システムであって、
    前記第1のデータベースサーバは、
    実行されたSQL文を指す実行ログと、所定のテーブルを格納し、
    前記移行サーバは、
    前記第1のデータベースサーバに格納されている前記実行ログを取得する実行ログ取得部と、
    前記実行ログから、前記第1のデータベースサーバに格納されている前記テーブルの変更に関わる前記実行ログを関係実行ログとして抽出する関係実行ログ抽出部と、
    前記関係実行ログを用いて、前記第2のデータベースサーバに格納されたデータ間の関係を関係情報として生成する関係情報生成部と、
    を有することを特徴とするデータ移行システム。
  2. 前記関係情報生成部は、
    前記関係実行ログを解析することにより、前記第1のデータベースサーバに格納された前記テーブルに対して、1文以上の前記SQL文の連なりから構成される操作パターンを特定できるか否かを判定し、
    前記操作パターンを特定できた場合、
    特定した前記操作パターン、前記テーブルのテーブル名及び前記関係実行ログを含む情報を前記関係情報として生成することを特徴とする請求項1に記載のデータ移行システム。
  3. 前記関係情報生成部は、
    前記操作パターンを特定できない場合、
    前記操作パターンの特定失敗として、前記テーブル名及び前記関係実行ログを表示することを特徴とする請求項2に記載のデータ移行システム。
  4. 前記関係情報生成部は、
    前記操作パターンとして、前記テーブルの追加及び削除、前記テーブル名の変更、前記テーブルの結合及び分割に関するパターンをそれぞれ特定することを特徴とする請求項2に記載のデータ移行システム。
  5. 前記関係情報生成部は、
    前記テーブルに対応した前記関係実行ログと前記操作パターンとを照合し、前記SQL文の構文の一致を判定することにより、前記テーブルに対する前記操作パターンを特定することを特徴とする請求項2に記載のデータ移行システム。
  6. 前記関係実行ログ抽出部は、
    前記実行ログ取得部から送信された前記実行ログを受け取り、前記実行ログの前記SQL文を前記テーブルへの操作に関連した前記SQL文の構文が列挙された操作リストと照合し、前記SQL文の構文が一致する前記SQL文を前記関係実行ログとして抽出し、抽出した前記関実行ログを前記関係情報生成部に送信することを特徴とする請求項1に記載のデータ移行システム。
  7. 前記関係実行ログ抽出部は、
    前記実行ログに含まれる前記SQL文と前記操作リストに記載された前記SQL文の構文とが一致するかを判定し、前記SQL文が前記SQL文の構文のいずれかに一致した場合に、前記SQL文が前記関係実行ログであると判定することを特徴とする請求項6に記載のデータ移行システム。
  8. 前記SQL文の構文は、
    前記第1のデータベースサーバに格納された前記テーブルの変更を伴う構文であることを特徴とする請求項6に記載のデータ移行システム。
  9. 前記移行サーバは、
    前記関係実行ログを蓄積するストレージと、
    前記関係実行ログを前記ストレージに蓄積する関係実行ログ管理部と、
    を更に有すること特徴とする請求項1に記載のデータ移行システム。
  10. 前記移行サーバは、
    前記関係情報を用いて、前記第2のデータベースサーバに格納されたテーブルに対し、所定のビューを生成するための前記SQL文を生成するビュー生成式生成部を更に有すること特徴とする請求項1に記載のデータ移行システム。
  11. 実行されたSQL文を指す実行ログと所定のテーブルを格納した第1のデータベースサーバから第2のデータベースサーバにデータを移行させるデータ移行サーバであって、
    前記第1のデータベースサーバに格納されている前記実行ログを取得する実行ログ取得部と、
    前記実行ログから、前記第1のデータベースサーバに格納されている前記テーブルの変更に関わる前記実行ログを関係実行ログとして抽出する関係実行ログ抽出部と、
    前記関係実行ログを用いて、前記第2のデータベースサーバに格納されたデータ間の関係を関係情報として生成する関係情報生成部と、
    を有することを特徴とするデータ移行サーバ。
  12. 前記関係情報生成部は、
    前記関係実行ログを解析することにより、前記第1のデータベースサーバに格納された前記テーブルに対して、1文以上の前記SQL文の連なりから構成される操作パターンを特定できるか否かを判定し、
    前記操作パターンを特定できた場合、
    特定した前記操作パターン、前記テーブルのテーブル名及び前記関係実行ログを含む情報を前記関係情報として生成し、
    前記操作パターンを特定できない場合、
    前記操作パターンの特定失敗として、前記テーブル名及び前記関係実行ログを表示することを特徴とする請求項11に記載のデータ移行サーバ。
  13. 前記関係実行ログ抽出部は、
    前記実行ログ取得部から送信された前記実行ログを受け取り、前記実行ログの前記SQL文を前記テーブルへの操作に関連した前記SQL文の構文が列挙された操作リストと照合し、前記SQL文の構文が一致する前記SQL文を前記関係実行ログとして抽出し、抽出した前記関実行ログを前記関係情報生成部に送信することを特徴とする請求項11に記載のデータ移行サーバ。
  14. 前記関係実行ログを蓄積するストレージと、
    前記関係実行ログを前記ストレージに蓄積する関係実行ログ管理部と、
    前記関係情報を用いて、前記第2のデータベースサーバに格納されたテーブルに対し、所定のビューを生成するための前記SQL文を生成するビュー生成式生成部と、
    を更に有すること特徴とする請求項11に記載のデータ移行サーバ。
JP2018057121A 2018-03-23 2018-03-23 データ移行システム及びデータ移行サーバ Active JP6773708B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018057121A JP6773708B2 (ja) 2018-03-23 2018-03-23 データ移行システム及びデータ移行サーバ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018057121A JP6773708B2 (ja) 2018-03-23 2018-03-23 データ移行システム及びデータ移行サーバ

Publications (2)

Publication Number Publication Date
JP2019169001A JP2019169001A (ja) 2019-10-03
JP6773708B2 true JP6773708B2 (ja) 2020-10-21

Family

ID=68107416

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018057121A Active JP6773708B2 (ja) 2018-03-23 2018-03-23 データ移行システム及びデータ移行サーバ

Country Status (1)

Country Link
JP (1) JP6773708B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6780181B2 (ja) * 2018-11-16 2020-11-04 益滿 大 データベースおよび情報処理システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1091494A (ja) * 1996-09-19 1998-04-10 Hitachi Ltd データベース操作プログラムの変換方法および変換装置
JP2008165447A (ja) * 2006-12-27 2008-07-17 Ntt Data Corp データアクセス装置、データアクセス方法、及び、コンピュータプログラム
JP4741689B2 (ja) * 2009-03-11 2011-08-03 株式会社日立製作所 データ処理方法、データ処理装置およびデータ処理プログラム
JP5601066B2 (ja) * 2010-07-23 2014-10-08 富士通株式会社 情報統合プログラム、装置及び方法
US9542468B2 (en) * 2014-03-24 2017-01-10 Hitachi, Ltd. Database management system and method for controlling synchronization between databases

Also Published As

Publication number Publication date
JP2019169001A (ja) 2019-10-03

Similar Documents

Publication Publication Date Title
JP2022120014A (ja) データ取り込みおよび該データへのユーザアクセス促進システムおよび方法
WO2014010082A1 (ja) 検索装置、検索装置の制御方法及び記録媒体
JP6471262B2 (ja) データ処理システム
JP2008243078A (ja) 分散データベースから情報を検索するシステム、装置、および方法
WO2013038489A1 (ja) 計算機システム、クライアント計算機の管理方法及び記憶媒体
KR101083563B1 (ko) 데이터베이스 관리 방법 및 시스템
JP6550448B2 (ja) データ管理装置、データ管理方法、およびプログラム
US9460142B2 (en) Detecting renaming operations
US20200226130A1 (en) Vertical union of feature-based datasets
JP4237813B2 (ja) 構造化文書管理システム
JP6773708B2 (ja) データ移行システム及びデータ移行サーバ
JP4747213B2 (ja) 文書を収集するためのシステムおよびプログラム
RU2634223C2 (ru) Способ (варианты) и система (варианты) управления данными, связанными с иерархической структурой
JP5266992B2 (ja) 電子ドキュメント管理システム、電子ドキュメント管理方法およびそのプログラム
JP2017027349A (ja) レプリケーションプログラム
JP7331384B2 (ja) 情報処理装置及びプログラム
JP5867208B2 (ja) データモデル変換プログラム、データモデル変換方法およびデータモデル変換装置
KR20180006484A (ko) Rdb 시스템
JP2015191389A (ja) 移行処理結果探索装置
JP2019028933A (ja) 多次元データ管理システム及び多次元データ管理方法
WO2023276212A1 (ja) ソフトウェア部品更新システム及びソフトウェア部品更新方法
JP5359446B2 (ja) 情報処理システム、アクセスパス決定方法及びアクセスパス決定プログラム
JP2015219672A (ja) データ管理装置、データ管理方法、及び、そのプログラム
JP4304226B2 (ja) 構造化文書管理システム、構造化文書管理方法及びプログラム
JP4160627B2 (ja) 構造化文書管理システム及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190620

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200630

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200828

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200908

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201001

R150 Certificate of patent or registration of utility model

Ref document number: 6773708

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150