【IRIS/Cache】テストデータを作成しよう(%PopulateUtils備忘録)

本記事は、%Library.PopulateUtils.clsの備忘録になります。

関数説明

%PopulateUtilsに設定された関数群の説明と使い方の解説を行います。

Integer・String等の基本的な型

Integer

整数値を返す

・引数
Integer(min As %Integer = 0, max As %Integer = 1000000000) as %Integer

w ##class(%PopulateUtils).Integer() // 126453899

Float

浮動小数点値を返す

・引数
Float(min As %Float = 0, max As %Float = 10000, scale As %Integer = 0) as %Integer

scaleは小数点以下の桁数

w ##class(%PopulateUtils).Float(0,100,4) // 37.8325

String

文字列を返す

・String(len As %Integer = 1) as %String

パターンは下記
$e($c($zu(165,1,26)+65)_$zu(165,1,9999), 1, $s(len>0:len,1:1))

1~5文字内で、len桁で切り取って返す。
ランダムな文字列をイメージしていると、割とショッパイ感じの値を返す関数

w ##class(%PopulateUtils).String(5) // R8008

StringMin

文字列を返す
ランダムな文字列をイメージするなら、String()よりこちらの方が沿っている気がします。

・引数
StringMin(minlen As %Integer = 1, maxlen As %Integer = 1) as %String
 最小文字数と最大文字数を指定し、その文字数範囲内でランダムな文字数の文字列を返す

w ##class(%PopulateUtils).StringMin(1,10) // hQkNPac

VarString

文字列を返す

・引数
VarString(maxlen As %Integer = 1) as %String

返される文字列は、最大「maxlen」内のランダムな文字数になる

w ##class(%PopulateUtils).VarString(10) // RRZ!%[RZ7

日時関連

Date

日付を返す

・引数
Date(min As %Date, max As %Integer) as %Date

w ##class(%PopulateUtils).Date() // 39581

CDate

日付を指定のフォーマットで出力します。

・引数
CDate(format As %Integer = 1, min As %Date = 30000, max As %Date = 55000) as %String

// 2024-01-01~2024-12-31間の日付をyyyy-mm-ddのフォーマットで返す
w ##class(%PopulateUtils).CDate(3, 66840, 67205)

PosixTime

PosixTime値を返す

PosixTime(min As %PosixTime = “”, max As %PosixTime = “”) as %PosixTime

min, maxが有効値でない場合、min=-6919738016441081856 (1900-01-01 00:00:00)、max=現在日時

w ##class(%PopulateUtils).PosixTime() // 1154312571753350586

TimeStamp

タイムスタンプ値を返す

・引数
TimeStamp(min As %TimeStamp, max As %TimeStamp) as %String

w ##class(%PopulateUtils).TimeStamp() // 1987-06-15 01:10:46

住所関連

USState

アメリカの州の略語を返す

AK, AL, AR, AZ, CA, CO, CT, DE, FL, GA, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WI, WV, WY

w ##class(%PopulateUtils).USState() // ND

City

26の都市名を返す。

都市名のリストは下記。頭文字がA~Zまでの都市名。KがなくBが重複している。
Albany, Boston, Bensonhurst, Chicago, Denver, Elmhurst, Fargo, Gansevoort, Hialeah, Islip, Jackson, Larchmont, Miami, Newton, Oak Creek, Pueblo, Queensbury, Reston, St Louis, Tampa, Ukiah, Vail, Washington, Xavier, Youngstown, Zanesville

w ##class(%PopulateUtils).City()

Street

住所を返す

パターンは下記
$zu(165,1,9999)+1_” “_グループ①_” “_グループ②

【第①グループ】
Maple, Ash, Elm, Oak, Main, First, Second, Washington, Franklin, Clinton, Madison

【第②グループ】
Street, Avenue, Blvd, Court, Place, Drive

w ##class(%PopulateUtils).Street() // 8191 Washington Court

USZip

アメリカの郵便番号を返す

パターンは下記
$zu(165, 1, 89999)+10000

w ##class(%PopulateUtils).USZip() // 14938

USPhone

アメリカの電話番号を返す

パターンは下記
$zu(165,1,799)+200_”-“_$zu(165,1,799)+200_”-“_$zu(165,1,8999)+1000

w ##class(%PopulateUtils).USPhone() // 588-795-7227

人物情報

FirstName

人物の名前を返す。男と女を引数に持つ。

・引数
FirstName(gender As %String = “”) as %String
 gender = 1:男性, 2:女性, null:両方

【男性名称=75種】
Al, Alfred, Alvin, Andrew, Angelo, Aviel, Bart, Bill, Bob, Brendan, Brian, Buzz, Chad, Charles, Chris, Clint, Dan, Dave, David, Dick, Dmitry, Ed, Edgar, Edward, Elmo, Elvis, Emilio, Fred, Geoffrey, George, Howard, James, Jeff, Joe, John, Jose, Joshua, Jules, Keith, Kenny, Kevin, Lawrence, Mark, Mario, Martin, Marvin, Michael, Milhouse, Mo, Neil, Norbert, Orson, Patrick, Paul, Peter, Phil, Quentin, Quigley, Ralph, Richard, Rob, Robert, Roger, Sam, Stavros, Stuart, Ted, Terry, Umberto, Vincent, Will, William, Wolfgang, Xavier, Zeke

【女性名称=74種】
Agnes, Alexandra, Alice, Amanda, Angela, Ashley, Barb, Barbara, Belinda, Brenda, Charlotte, Chelsea, Christine, Christen, Danielle, Debra, Debby, Diane, Elvira, Emily, Emma, Filomena, Frances, Gertrude, Greta, Hannah, Heloisa, Imelda, Jane, Janice, Jocelyn, Josephine, Juanita, Julie, Kim, Kirsten, Kristen, Kyra, Laura, Linda, Lisa, Liza, Lola, Lydia, Maria, Mary, Maureen, Michelle, Molly, Nataliya, Natasha, Nellie, Olga, Pam, Pat, Patricia, Phyllis, Rhonda, Roberta, Sally, Samantha, Sophia, Susan, Tara, Terry, Thelma, Uma, Usha, Valery, Violet, Wilma, Yan, Zelda, Zoe

w ##class(%PopulateUtils).FirstName()

LastName

人物の苗字を返します。すごい多い・・・

【苗字245種】
Allen, Avery, Adam, Adams, Alton, Ahmed, Anderson, Baker, Beatty, Burroughs, Bach, Bachman, Black, Brown, Browne, Browning, Braam, Basile, Bukowski, Bush, Chadbourne, Cheng, Chang, Campos, Cannon, Chadwick, Chesire, Clinton, Clay, Connors, Cooke, Cooper, Cerri, Cunningham, Diavolo, DeSantis, Djakovic, DeLillo, Drabek, Donaldson, Davis, Dunlap, Duquesnoy, Evans, Edwards, Eisenstien, Edison, Emerson, Eno, Eastman, Eagleman, Frith, Fripp, Finn, Faust, Fives, Frost, Feynman, Gaboriault, Geoffrion, Gomez, Gallant, Goldman, Gore, Gibbs, Gold, Goncharuk, Grabscheid, Garcia, Houseman, Huff, Hanson, Harrison, Hills, Hertz, Hammel, Humby, Hernandez, Isaksen, Ironhorse, Ipsen, Ingrahm, Ingersol, Iacobelli, Ingleman, Isaacs, Ihringer, Jafari, Joyce, Jackson, Jones, Johnson, Jaynes, Jung, Jenkins, Koivu, Kovalev, King, Klingman, Kelvin, Klein, Klausner, Kratzmann, Koenig, Larson, Leiberman, Lennon, Lepon, Levinson, Long, LaRocca, Lee, Li, Lubbar, Love, Loveluck, Lopez, Mara, Massias, Malkovich, Moon, Murphy, Murray, McCormick, Macrakis, Mailer, Munt, Martinez, Mastrolito, Minichillo, Monroe, Malynko, Miller, Marks, McCoy, Noodleman, Novello, Nagel, Nathanson, Newton, Nelson, North, Ng, Nichols, O’Donnell, O’Brien, O’Rielly, Orwell, Orlin, Ott, Olsen, Page, Paladino, Palmer, Pantaleo, Pape, Paraskiv, Pascal, Perez, Peters, Peterson, Petersburg, Pybus, Presley, Press, Quigley, Quilty, Quince, Quincy, Quine, Quixote, Ramsay, Ragon, Ravazzolo, Rogers, Rotterman, Roentgen, Rodriguez, Russell, Smith, Smyth, Schultz, Schulte, Salm, Sato, Schaefer, Simpson, Sands, Solomon, Semmens, Sorenson, Sverdlov, Tesla, Tsatsulin, Tweed, Thompson, Taylor, Tillem, Townsend, Ubertini, Uhles, Ueckert, Umansky, Uberoth, Ulman, Underman, Van De Griek, Vanzetti, Vivaldi, Vonnegut, Waal, Walker, Wilson, Woo, Wells, Waters, Willeke, Wijnschenk, Waterman, Winters, White, Williams, West, Xander, Xavier, Ximines, Xerxes, Xenia, Xiang, Young, Yeats, Yang, Yu, Yancik, Yakulis, Yezek, Yoders, Zemaitis, Zubik, Zimmerman, Zevon, Zucherro, Zampitello, Zweifelhofer

w ##class(%PopulateUtils).LastName()

Name

人名を返す

組み合わせは下記ルール。ファーストネームからじゃないのか・・・
..LastName()_”,”_..FirstName(gender)_” “_$c($zu(165,1,26)+65)_”.”

・引数
Name(gender As %String = “”) as %String
 gender = 1:男性, 2:女性, null:両方

w ##class(%PopulateUtils).Name() // Thompson,Charlotte G.

SSN

米国社会保障番号を返す

パターンは下記
$zu(165,1,899)+100_”-“_$zu(165,1,89)+10_”-“_$zu(165,1,8999)+1000

w ##class(%PopulateUtils).SSN() // 822-21-8024

会社情報

Company

会社名を返す

会社名生成のルールは下記3つのグループを①_②_③の順に結合して返す

【第①グループ】
Compu, Dyna, Quanta, Hyper, Meta, Kwal, Opti, Robo, Tera, Mega, Giga, Xena, Micro, Macro, Inter, Yoyo, Medi, Pico, Accu, Globa, Octo, Cyber, Tele, Syner, Securi, Bio, Intra

【第②グループ】
Dyne, Sys, Tron, Matix, mo, gy, Sonics, Calc, Tel, Soft, Dynamics, Pedia, Systems, Net, Data, Ware, Glomerate, Lateral, Tech, Plex, Comp

【第③グループ】
Inc., Corp., Media Inc., Holdings Inc., .com, LLC., Group Ltd., Associates, Partners, Gmbh.

w ##class(%PopulateUtils).Company()

Mission

「企業の目指す目標・使命・経営理念」等を返す

下記6つのグループから1つづつ選択し、順に結合して返す。

【第①グループ】
Leaders in , Developers of , Providers of , Resellers of , On-line distributors of , Experts in , Specializing in the development and manufacturing of , Post-sale services for , Spearheading the next generation of , The industry leader in , Enabling individuals and businesses to manage , Building shareholder value by delivering

【第②グループ】
“”, advanced , cutting-edge , breakthrough , complex , high-performance , scalable , just-in-time , open , personal , high-tech , high-touch , open-source , virtual , interactive , eco-friendly , agile , cloud-based , premise-based , sustainable , intelligent , innovative , world-class , knowledge-based , compliant , secure , standards-based , disruptive , non-linear , dynamic , enhanced , real-time , synergistic

【第③グループ】
””, quantum , nano-, hyper-, optical , financial , multi-media , object-oriented , broad-band , secure , digital , enterprise , crowd-sourced , genetic , wireless , satellite-based , ISO 9003-ready , Web 3.0 , HTML5 , post-Microsoft , natural language , big data , predictive analytic , seven-sigma , distributed , massively-parallel , mission-critical

【第④グループ】
””, devices and , instrumentation , graphical , XML , Internet , application development , database , data warehouse , forecasting , voice-enabled , cold-fusion powered , platforms for , advanced , virtualized

【第⑤グループ】
services , technologies , media , content , middle-ware , connectivity , consulting services , gaming , models , productivity tools , instruments , marketing services , apps

【第⑥グループ】
for on-line commerce., for the Financial community., for discriminating investors., for the Entertainment industry., for consumers., for the Fortune 5., for the Fortune 50., for the Fortune 500., for the Fortune 5000., for the enterprise., for the desktop., for the Health Care community., for mobile devices., for social networks., for industry and government., for emerging markets., for industry and academia., for capital markets., for high-worth individuals., for our long-term clients., for the pharmaceutical industry., for additive manufacturing.

w ##class(%PopulateUtils).Mission()

Title

役職を返す

下記2つのグループを連結する

【第①グループ】
“, Senior , Associate , Assistant , Strategic , Global , Laboratory , Executive

【第②グループ】
Engineer, Sales Rep., Support Engineer, Developer, Marketing Manager, Accounts Rep., Resources Director, Director, Product Manager, Research Asst., Systems Engineer, Technician, WebMaster, Administrator, Product Specialist, Accountant, Hygienist

w ##class(%PopulateUtils).Title() // Global Director

Product

製品名を返す

Table, Chair, Lamp, Desk

w ##class(%PopulateUtils).Product()

その他

ArrayElement

引数「text」に渡す配列から、ランダムで1つを選択し返します。

k text
s text($i(text))="a"
s text($i(text))="b"
s text($i(text))="c"
w ##class(%PopulateUtils).ArrayElement(.text) // 値がランダムで返る

BuildReferenceSample

指定したテーブルのレコードIDを取得します。

・引数
BuildReferenceSample(class, sample, size=500, selpct=25)

クラスのレコードIDが第二引数「sample」に格納されます。
sizeはサンプル数で、selpctはレコード全体の何%を対象とするかを指定します

s clsNm="developer.csv.Patient"
d ##class(%PopulateUtils).BuildReferenceSample(clsNm,.sample, 10, 90)
zw sample
// 下記がターミナルに表示されます
// sample=10
// sample(1)=51
// ...
// sample(10)=20

BuildValueSetSQL

SQLを実行し、列データを取得します。

・引数
BuildValueSetSQL(cptr, cext, table, column, size=500, verbose=0) as %Status

下記グローバルに格納されます。
^IRIS.Temp(cptr, cext, [cnt])=columnデータ(列データ)

verbose=1とすると、実行クエリや進行状況などが出力されます。

s tbl="developer_csv.Patient"
s clm="漢字氏名"
d ##class(%PopulateUtils).BuildValueSetSQL(1,1,tbl,clm,10,1)
zw ^IRIS.Temp(1,1)
// 下記がターミナルに表示されます
// ^IRIS.Temp(1,1)=10
// ^IRIS.Temp(1,1,1)="伊藤 太郎"
// ...
// ^IRIS.Temp(1,1,2)="佐藤 太郎"

ExtentValue

^IRIS.Temp(cptr, cext)のデータをランダムに返す
BuildValueSetSQLとセット

・引数
ExtentValue(cptr As %Integer, cext As %Integer) as %String

w ##class(%PopulateUtils).ExtentValue(1,1) // 田中 太郎

Counter

^||%Populate(“c”, counter)に対し、$incrementを実行します。

・引数
Counter(counter As %String = “c”, initial As %Integer = 1) as %Integer

counter=カウントする種類、initial=初期値

w ##class(%PopulateUtils).Counter("a") // 1
w ##class(%PopulateUtils).Counter("a") // 2
w ##class(%PopulateUtils).Counter("b", 2) // 2
w ##class(%PopulateUtils).Counter("b") // 3

Currency

通貨値を返す

・引数
Currency(min As %Integer = 0, max As %Integer = 10000) as %Integer

w ##class(%PopulateUtils).Currency() // 7433.543 小数点...?

Color

5つの色名を返す

Red, Green, Blue, Yellow, Black

w ##class(%PopulateUtils).Color()

Random

0~nの乱数を返す

w ##class(%PopulateUtils).Random(100) // 28

Syllable

意味ありそうで全くない文章っぽいような文字列を返す。

・引数
Syllable(maxlen As %Integer = 30) as %String

下記4つのグループからランダムに文字列を選択し結合し、maxlenの値で切り落とす。
半角スペースは連結後に1/2の確率で付加される。

【第①グループ】
A, I, Am, An, Iso, Ic

【第②グループ】
Lo, Ly, Re, Co, To, On, Op

【第③グループ】
Com, Syn, Tri, Uni, Via, Geo, Ism, Ion, Ies, Two, Pus, Tech, Quo

【第④グループ】
Able, Cycle, Atic, Look, Mili, Nano, Octo, Pyro, Status, Kilo, Dyna, Endo, Ecto, Gyro, Heli, Atic, Able, Look, Much, Graph, Gram, Wave, Sound, Plasm, Physical, Scope, Copter, Morph, Range, Pede, Second, Zeno, Photo, Type, Much, Invent, Thetic

w ##class(%PopulateUtils).Syllable() // LyCom TechCoOn Invent IcL

ValueList

指定したリストから文字を返す
 ※”,”から開始する事

w ##class(%PopulateUtils).ValueList(",藤原道長,紫式部,源倫子,一条天皇") // 源倫子

おわりに

今回、本記事を書くにあたり、%PopulateUtilsの各関数を覗いてみました。

「意味のあるテストデータを作成して使ってほしい。」
InterSystems社の意気込みを感じました。

皆様も、何かの折にこのクラスをみかけたら、覗いてみてください。

ただし英語だけどね!(笑