データ視覚化パート12:数千万のデータを生成してデータを生成するためのPowerDesigner構成

前書き:

    職場ではテストの必要性に応えたので、自分でバッチインサートを書くことを考えました。ただし、データ量が多すぎて、挿入によるバッチ処理が面倒です。

ファクトテーブルとディメンションテーブルの定義、およびテストデータ:

    (1)医療収入ファクトシート

テーブルproject_cost_factを作成します

((

  id int主キーauto_increment、

  cost_direction_code VARCHAR(20)コメント「コスト方向コード」、 

  Hospital_code VARCHAR(20)コメント「病院の固定小数点コード」、 

  level_code VARCHAR(20)コメント '病院レベルコード'、

  time_code VARCHAR(10)コメント 'タイムコード'、

  Income_type_code VARCHAR(32)コメント '収入カテゴリーコード:1。外来患者収入2.登録収入3.診断収入4.検査収入5.臨床検査収入6.治療収入7.手術収入8.健康材料収入9.西洋医学収入10。中国の漢方薬からの収入11、独自の中国医学からの収入12、医薬品サービス料金からの収入13、他の外来サービスからの収入14、入院からの収入15、ベッドからの収入16、介護からの収入17、他の入院からの収入 '、

  借用VARCHAR(32)コメント「借用方向」、

  見越DOUBLEコメント「金額」、 

  合計DOUBLEコメント「合計」

    (2)時間ディメンションテーブル

CREATE TABLE time_type(

  コードVARCHAR(20)コメント「タイムコード」、

  年INTコメント「年」、

  year_name VARCHAR(20)コメント '年名'、

  四半期INTコメント「四半期」、

  Quarter_name VARCHAR(20)コメント '四半期名'、

  月INTコメント「月」、

  month_name VARCHAR(20)コメント '月名'、

  create_time VARCHAR(20)コメント '作成時間')

time_type値に挿入(「1」、「2017」、「2017」、「1」、「第1四半期」、「1」、「1月」、「2020-04-24 06:50:53」) ;

time_type値に挿入( '2'、 '2017'、 '2017'、 '1'、 '第1四半期'、 '2'、 'February'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '3'、 '2017'、 '2017'、 '1'、 '第1四半期'、 '3'、 '3月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '4'、 '2017'、 '2017'、 '2'、 'Q2'、 '4'、 'April'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '5'、 '2017'、 '2017'、 '2'、 'Q2'、 '5'、 'May'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '6'、 '2017'、 '2017'、 '2'、 '第2四半期'、 '6'、 '6月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '7'、 '2017'、 '2017'、 '3'、 '第3四半期'、 '7'、 '7月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '8'、 '2017'、 '2017'、 '3'、 '第3四半期'、 '8'、 'August'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '9'、 '2017'、 '2017'、 '3'、 '第3四半期'、 '9'、 '9月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '10'、 '2017'、 '2017'、 '4'、 'Q4'、 '10'、 'October'、 '2020-04-24 06:50:53') ;

time_typeに挿入values( '11'、 '2017'、 '2017'、 '4'、 '第4四半期'、 '11'、 '11月'、 '2020-04-24 06:50:53' );

time_typeに挿入values( '12'、 '2017'、 '2017'、 '4'、 '第4四半期'、 '12'、 '12月'、 '2020-04-24 06:50:53' );

time_type値に挿入( '13'、 '2018'、 '2018'、 '1'、 '第1四半期'、 '1'、 'January'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '14'、 '2018'、 '2018'、 '1'、 '第1四半期'、 '2'、 'February'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '15'、 '2018'、 '2018'、 '1'、 '第1四半期'、 '3'、 '3月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '16'、 '2018'、 '2018'、 '2'、 '第2四半期'、 '4'、 'April'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '17'、 '2018'、 '2018'、 '2'、 'Q2'、 '5'、 'May'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '18'、 '2018'、 '2018'、 '2'、 'Q2'、 '6'、 'June'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '19'、 '2018'、 '2018'、 '3'、 '第3四半期'、 '7'、 '7月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '20'、 '2018'、 '2018'、 '3'、 '第3四半期'、 '8'、 '8月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '21'、 '2018'、 '2018'、 '3'、 '第3四半期'、 '9'、 '9月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '22'、 '2018'、 '2018'、 '4'、 'Q4'、 '10'、 'October'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '23'、 '2018'、 '2018'、 '4'、 '第4四半期'、 '11'、 '11月'、 '2020-04-24 06:50:53' );

time_type値に挿入( '24'、 '2018'、 '2018'、 '4'、 '第4四半期'、 '12'、 '12月'、 '2020-04-24 06:50:53' );

time_type値に挿入( '25'、 '2019'、 '2019'、 '1'、 '第1四半期'、 '1'、 '1月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '26'、 '2019'、 '2019'、 '1'、 '第1四半期'、 '2'、 'February'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '27'、 '2019'、 '2019'、 '1'、 '第1四半期'、 '3'、 '3月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '28'、 '2019'、 '2019'、 '2'、 'Q2'、 '4'、 'April'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '29'、 '2019'、 '2019'、 '2'、 'Q2'、 '5'、 'May'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '30'、 '2019'、 '2019'、 '2'、 'Q2'、 '6'、 'June'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '31'、 '2019'、 '2019'、 '3'、 '第3四半期'、 '7'、 '7月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '32'、 '2019'、 '2019'、 '3'、 '第3四半期'、 '8'、 '8月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '33'、 '2019'、 '2019'、 '3'、 '第3四半期'、 '9'、 '9月'、 '2020-04-24 06:50:53') ;

time_type値に挿入( '34'、 '2019'、 '2019'、 '4'、 'Q4'、 '10'、 'October'、 '2020-04-24 06:50:53') ;

time_typeに挿入values( '35'、 '2019'、 '2019'、 '4'、 '第4四半期'、 '11'、 '11月'、 '2020-04-24 06:50:53' );

time_type値に挿入( '36'、 '2019'、 '2019'、 '4'、 '第4四半期'、 '12'、 '12月'、 '2020-04-24 06:50:53' );

    (3)病院寸法表

テーブル病院を作成する(

id int主キーauto_increment、

Hospital_code VARCHAR(20)コメント「病院コード」、 

Hospital_name VARCHAR(20)コメント「病院名」 

Hospital(hospital_code、hospital_name)に挿入values( '6251088'、 '徐水**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6250007'、 '徐水**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6250009'、 '保定**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6251035'、 '保定**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6251001'、 '保定**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6251002'、 '保定**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6251004'、 '保定**院');

Hospital(hospital_code、hospital_name)に挿入values( '6251888'、 '徐**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6251005'、 '徐水**医院');

Hospital(hospital_code、hospital_name)に挿入values( '6258888'、 '徐水**医院');  

    (4)病院レベルの寸法

CREATE TABLE Hospital_level(

  level_code VARCHAR(20)コメント '病院レベルコード'、

  level_name VARCHAR(20)コメント '病院レベル名'、

  create_time VARCHAR(20)コメント「createtime」

  )

Hospital_level値に挿入します( '1'、 '第3レベルの病院'、 '2020-04-24 06:50:42');

Hospital_level値に挿入します( '2'、 '第2レベルの病院'、 '2020-04-24 06:50:42');

Hospital_levelの値に挿入します( '3'、 'first-level Hospital'、 '2020-04-24 06:50:42');

Hospital_levelの値に挿入します( '4'、 'Below first level(community Medical)'、 '2020-04-24 06:50:42');

    (5)部門ディメンションテーブル

テーブルoffice_type(を作成します

  id int主キーauto_increment、

  office_code VARCHAR(32)コメント '部門コード'、

  office_name VARCHAR(32)コメント「部門名」

office_type(office_code、office_name)に値( '1'、 '普昆虫');を挿入します。

office_type(office_code、office_name)に値( '2'、 '骨外科');を挿入します。

office_type(office_code、office_name)に値( '3'、 '心内科');を挿入します。

office_type(office_code、office_name)に値( '4'、 '口科');を挿入します。

office_type(office_code、office_name)に値( '5'、 '消化科');を挿入します。

office_type(office_code、office_name)に値( '6'、 '肾内科');を挿入します。

office_type(office_code、office_name)に値( '7'、 '眼科');を挿入します。

office_type(office_code、office_name)に値( '8'、 '免疫科');を挿入します。

office_type(office_code、office_name)の値( '9'、 '感染症部門');に挿入します。

office_type(office_code、office_name)に値( '10'、 '急诊科');を挿入します。

office_type(office_code、office_name)に値( '11'、 '皮肤科');を挿入します。

office_type(office_code、office_name)に値( '12'、 '神经内科');を挿入します。

office_type(office_code、office_name)の値( '13'、 '新生児医学');に挿入します。

office_type(office_code、office_name)に挿入値( '14'、 '耳鼻喉科科');

office_type(office_code、office_name)に値( '15'、 '呼吸中心');を挿入します。

office_type(office_code、office_name)値( '16'、 '血液腫瘍センター');に挿入します。

    (6)コスト項目ディメンションテーブル

テーブルproject_typeを作成します

((

id int主キーauto_increment、

 project_code VARCHAR(32)コメント「コストプロジェクトコード」、

 project_name VARCHAR(32)コメント「コストプロジェクト名」

project_type(project_code、project_name)に挿入values( '1'、 '员经费');

project_type(project_code、project_name)に挿入values( '2'、 '衛生材料料金');

project_type(project_code、project_name)に挿入values( '3'、 '药品费');

project_type(project_code、project_name)に値( '4'、 '固定資産の減価償却');を挿入します。

project_type(project_code、project_name)に挿入values( '5'、 '無形資産の償却');

project_type(project_code、project_name)に値を挿入します( '6'、 '医療リスク基金を撤回します');

project_type(project_code、project_name)に挿入values( '7'、 'その他の費用');

project_type(project_code、project_name)に挿入values( '8'、 '合计');

project_type(project_code、project_name)に挿入values( '9'、 'Department Income');

project_type(project_code、project_name)に挿入values( '10'、 'income-cost');

project_type(project_code、project_name)に挿入values( '11'、 '床日成本');

project_type(project_code、project_name)に挿入values( '12'、 '诊次成本');

    (7)所得カテゴリーディメンションテーブル

テーブルincome_type(を作成します

id int主キーauto_increment、

Income_type_code VARCHAR(32)コメント '収入カテゴリーコード:1。外来患者収入2.登録収入3.診断収入4.検査収入5.臨床検査収入6.治療収入7.手術収入8.健康材料収入9.西洋医学収入10。中国の漢方薬からの収入11、独自の中国医学からの収入12、医薬品サービス料金からの収入13、他の外来サービスからの収入14、入院からの収入15、ベッドからの収入16、介護からの収入17、他の入院からの収入 '、

Income_type_name VARCHAR(32)コメント '収入カテゴリーの名前:1。外来患者収入2.登録収入3.診断収入4.検査収入5.臨床検査収入6.治療収入7.手術収入8.健康材料収入9.西洋医学収入10。漢方薬からの収入11、独自の漢方薬からの収入12、薬局サービス料からの収入13、他の外来診療所からの収入14、入院からの収入15、ベッドからの収入16、介護からの収入17、その他の入院収入 '

)  

Income_type(income_type_code、income_type_name)に挿入values( '1'、 '门诊収入');

Income_type(income_type_code、income_type_name)に値を挿入します( '2'、 '挂号収入');

Income_type(income_type_code、income_type_name)に挿入values( '3'、 '诊調査収入');

Income_type(income_type_code、income_type_name)に値を挿入します( '4'、 '检查収入');

Income_type(income_type_code、income_type_name)に挿入values( '5'、 '化验収入');

Income_type(income_type_code、income_type_name)に値を挿入します( '6'、 '治疗補償入');

Income_type(income_type_code、income_type_name)に挿入values( '7'、 '手に収入');

Income_type(income_type_code、income_type_name)に挿入values( '8'、 '卫生総合収入');

Income_type(income_type_code、income_type_name)に値を挿入します( '9'、 '西药収入');

Income_type(income_type_code、income_type_name)に挿入values( '10'、 '中草药収入');

所得タイプ(income_type_code、income_type_name)に値を挿入します( '11'、 '中成药収入');

Income_type(income_type_code、income_type_name)に値を挿入します( '12'、 '医薬品サービス料金収入');

Income_type(income_type_code、income_type_name)に挿入values('13 '、'再び门诊収入 ');

Income_type(income_type_code、income_type_name)に値を挿入します( '14'、 '住院収入');

Income_type(income_type_code、income_type_name)に挿入values('15 '、'床位補償入 ');

Income_type(income_type_code、income_type_name)に値を挿入します( '16'、 '护理収入');

Income_type(income_type_code、income_type_name)に値を挿入します( '17'、 '私別住院収入');

    (8)コスト方向ディメンションテーブル

テーブルを作成しますcost_direction_type(

id int主キーauto_increment、

cost_direction_code VARCHAR(20)コメント「コスト方向コード」、 

cost_direction_name VARCHAR(20)コメント「コスト方向名」 

cost_direction_type(cost_direction_code、cost_direction_name)に挿入values( '1'、 '医疗収入');

cost_direction_type(cost_direction_code、cost_direction_name)に値( '2'、 '財務基本補助金収入');を挿入します。

cost_direction_type(cost_direction_code、cost_direction_name)に値を挿入します( '3'、 '金融プロジェクト補助金収入');

cost_direction_type(cost_direction_code、cost_direction_name)values( '4'、 'Science and Education Project Income');に挿入します。

cost_direction_type(cost_direction_code、cost_direction_name)に挿入values( '5'、 '再び収入');

cost_direction_type(cost_direction_code、cost_direction_name)に値を挿入します( '6'、 '医療ビジネスコスト');

cost_direction_type(cost_direction_code、cost_direction_name)に値を挿入します( '7'、 '金融プロジェクトの補助金支出');

cost_direction_type(cost_direction_code、cost_direction_name)に値を挿入します( '8'、 '科学および教育プロジェクトの支出');

cost_direction_type(cost_direction_code、cost_direction_name)に挿入values( '9'、 '管理费用');

    ファクトテーブルとディメンションテーブルの定義とデータは上記のとおりです。この記事の冒頭で、バッチ挿入の検索についても説明しました。データの量が多すぎて問題が多すぎると考えることができます。それはpsqlプログラミングによっても達成でき、私は保存されたプロシージャを書くのが面倒です。

それでは、大量のデータについて、データ量の計算方法について説明しましょう。

ファクトテーブル用に10,000個のレコードを作成するとします。これでほぼ十分ですよね?

レコードの総数=時間ディメンションテーブルレコード*病院ディメンションテーブルレコード*病院レベルディメンションテーブルレコード*部門ディメンションレコード*コスト項目ディメンションレコード*収入カテゴリディメンションテーブルレコード*費用方向ディメンションテーブルレコード*

レコードの総数= 36 * 10 * 3 * 16 * 12 * 17 * 9 = 31726080


PowerDesignerはテストデータを作成する機能を持っているようで、操作も便利で、実現プロセスを再利用できます。実現は以下のとおりです。

1.ライブラリにテーブルを逆に導入します

image.png

image.png

image.png

2.操作するユーザーを指定し、他のユーザーが操作しないようにし、データセキュリティに注意します。

image.png

3.ユーザーを指定してから、ユーザー内のどのテーブルを操作するかを指定します(ここでは1つのテーブルのみを作成しました)

image.png

4.インポートされたテーブル構造は次のとおりです。

image.png

注意:

IDはプライマリキーであり、自己増加させることができます。気にしないでください。

ビジネスニーズに応じて、指定した列のテストデータを生成します。ここでは、level_code文字列タイプと見越DOUBLEタイプを選択して説明します。テーブル内の他の列は、デフォルトでランダムな文字列で埋められます。

5.導入されたテーブル構造をダブルクリックします

image.png

6. [列]タブを見つけます。これがテーブル内のすべての列です。各列の前にシリアル番号があります。操作する列を見つけて、その前のシリアル番号をダブルクリックします。ここでは、隔週でleve_codeの前にあるシリアル番号3です。

image.png

image.png

7.level_code列の新しいテストデータプロファイルファイルを作成します

image.png

8.生成されたデータタイプを指定します。

自動:数値データの生成を表します。数値データは、規則的に増加するシーケンスとランダムな数値にすることができます。

リスト:生成されたデータにルールはありません。これらのデータをコレクションに入れることができます。Javaのリストに格納されているオブジェクトタイプと同様に、データタイプは制限されていません。

    1)、自動

image.png

image.png

image.png

image.png

新しく作成されたテストデータプロファイルがleve_code列に適用されました

2)、リスト

image.png

image.png

image.png

データのルールはありません(数値タイプを除いて、一部の文字列タイプも指定できます)

image.png

データにルールがある場合

image.png

image.png

image.png

新しく作成されたテストデータプロファイルが発生列に適用されました

image.png

ご覧のとおり、新しく作成された2つのテストデータプロファイル

9.実行をトリガーしてテストデータを生成します

image.png

image.png

image.png

100%で生成



おすすめ

転載: blog.51cto.com/51power/2540509