{"id":17674,"date":"2025-01-27T08:38:39","date_gmt":"2025-01-26T23:38:39","guid":{"rendered":"https:\/\/takuminasuno.com\/?p=17674"},"modified":"2025-01-27T15:12:16","modified_gmt":"2025-01-27T06:12:16","slug":"20250126_dataform_ja","status":"publish","type":"post","link":"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja","title":{"rendered":"Dataform\u4e0a\u3067SQL\u3092\u66f8\u3044\u3066BigQuery\u306b\u3042\u308b\u5c0f\u58f2\u696d\u306e\u58f2\u4e0a\u30c7\u30fc\u30bf\u5206\u6790\u3092\u3057\u3066\u307f\u305f"},"content":{"rendered":"<p>&#12371;&#12435;&#12395;&#12385;&#12399;&#12290;&#37027;&#38920;&#37326;&#25299;&#23455;&#12391;&#12377;&#12290;<p>&#20197;&#21069;&#26360;&#12356;&#12383;<a href=\"https:\/\/takuminasuno.com\/ja\/20241020_dataform_ja\" target=\"_top\">&#12300;Dataform&#12434;&#20351;&#12387;&#12390;BigQuery&#12395;&#12354;&#12427;GA4&#12487;&#12540;&#12479;&#12434;&#21152;&#24037;&#12375;&#12390;Looker Studio&#12391;&#21487;&#35222;&#21270;&#12375;&#12390;&#12415;&#12383;&#35441;&#12301;&#12392;&#12356;&#12358;&#35352;&#20107;<\/a>&#12391;Dataform&#12398;&#22522;&#26412;&#30340;&#12394;&#20351;&#12356;&#26041;&#12434;&#12414;&#12392;&#12417;&#12383;&#38555;&#12289;&#12381;&#12398;&#20013;&#12391;&#31777;&#26131;&#30340;&#12394;SQL&#12418;&#32057;&#20171;&#12375;&#12390;&#12356;&#12414;&#12375;&#12383;&#12290;&#12383;&#12384;&#12289;&#23455;&#21209;&#12434;&#32771;&#12360;&#12427;&#12392;&#12385;&#12423;&#12387;&#12392;&#29289;&#36275;&#12426;&#12394;&#12356;&#12392;&#12356;&#12358;&#12398;&#12364;&#27491;&#30452;&#12394;&#12392;&#12371;&#12429;&#12391;&#12375;&#12383;&#12290;<\/p><p>Dataform&#12434;&#12487;&#12540;&#12479;&#20998;&#26512;&#12398;&#23455;&#21209;&#12391;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12377;&#12427;&#12395;&#12399;&#12289;&#12487;&#12540;&#12479;&#20998;&#26512;&#12398;&#12383;&#12417;&#12398;SQL&#12398;&#22522;&#26412;&#30340;&#12394;&#26360;&#12365;&#26041;&#12434;&#25276;&#12373;&#12360;&#12390;&#12356;&#12367;&#12371;&#12392;&#12364;&#24517;&#38920;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><p>&#20170;&#22238;&#12399;&#12289;&#23567;&#22770;&#26989;&#12398;&#22770;&#19978;&#12487;&#12540;&#12479;&#12434;&#20998;&#26512;&#12377;&#12427;&#12371;&#12392;&#12434;&#24819;&#23450;&#12375;&#12289;&#12469;&#12531;&#12503;&#12523;&#12487;&#12540;&#12479;&#12395;&#23550;&#12375;&#12390;&#20840;&#12390;&#12398;&#20966;&#29702;&#12434;SQL&#12391;&#26360;&#12356;&#12383;&#12358;&#12360;&#12391;&#12289;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#22411;&#12392;&#12375;&#12390;&#12414;&#12392;&#12417;&#12390;&#12415;&#12383;&#12356;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&#12394;&#12362;&#12289;&#20803;&#12392;&#12394;&#12427;&#21508;&#12487;&#12540;&#12479;&#12477;&#12540;&#12473;&#12399;Google&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12395;&#32622;&#12356;&#12390;&#12362;&#12426;&#12289;Google&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12434;&#21442;&#29031;&#12375;&#12390;&#22806;&#37096;&#12486;&#12540;&#12502;&#12523;&#12434;&#29983;&#25104;&#12377;&#12427;&#12392;&#12371;&#12429;&#12363;&#12425;&#12473;&#12479;&#12540;&#12488;&#12377;&#12427;&#21069;&#25552;&#12391;&#36914;&#12417;&#12414;&#12377;&#12290;<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-17710 size-full\" src=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-bigquery.jpg\" alt=\"\" width=\"2421\" height=\"1260\"><\/p><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_68_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >\u76ee\u6b21<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81\" title=\"&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#27010;&#35201;\">&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#27010;&#35201;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AA%E3%83%8D%E3%83%BC%E3%82%B8\" title=\"&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;\">&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#SQL%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AE%E5%9E%8B\" title=\"SQL&#12395;&#12424;&#12427;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#22411;\">SQL&#12395;&#12424;&#12427;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#22411;<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90%EF%BC%88configtype_table%EF%BC%89\" title=\"&#9312;&#12486;&#12540;&#12502;&#12523;&#12398;&#26032;&#35215;&#20316;&#25104;&#65288;config.type:&#8217;table&#8217;&#65289;\">&#9312;&#12486;&#12540;&#12502;&#12523;&#12398;&#26032;&#35215;&#20316;&#25104;&#65288;config.type:&#8217;table&#8217;&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A1%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%EF%BC%88GROUP_BY%E5%8F%A5%EF%BC%89\" title=\"&#9313;&#12464;&#12523;&#12540;&#12503;&#21270;&#65288;GROUP BY&#21477;&#65289;\">&#9313;&#12464;&#12523;&#12540;&#12503;&#21270;&#65288;GROUP BY&#21477;&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A2%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%B8%E3%81%AE%E3%83%9E%E3%82%B9%E3%82%BF%E7%B5%90%E5%90%88%EF%BC%88LEFT_JOIN%E5%8F%A5%EF%BC%89\" title=\"&#9314;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12408;&#12398;&#12510;&#12473;&#12479;&#32080;&#21512;&#65288;LEFT JOIN&#21477;&#65289;\">&#9314;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12408;&#12398;&#12510;&#12473;&#12479;&#32080;&#21512;&#65288;LEFT JOIN&#21477;&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A3%E8%A4%87%E6%95%B0%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E7%B5%B1%E5%90%88%EF%BC%88UNION_ALL%E5%8F%A5%EF%BC%89\" title=\"&#9315;&#35079;&#25968;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12398;&#32113;&#21512;&#65288;UNION ALL&#21477;&#65289;\">&#9315;&#35079;&#25968;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12398;&#32113;&#21512;&#65288;UNION ALL&#21477;&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A4%E5%B7%AE%E5%88%86%E5%87%A6%E7%90%86%E3%81%AE%E5%AE%9F%E8%A3%85%EF%BC%88MERGE%E5%8F%A5%EF%BC%89\" title=\"&#9316;&#24046;&#20998;&#20966;&#29702;&#12398;&#23455;&#35013;&#65288;MERGE&#21477;&#65289;\">&#9316;&#24046;&#20998;&#20966;&#29702;&#12398;&#23455;&#35013;&#65288;MERGE&#21477;&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A5%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%AE%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%97%EF%BC%88projectConfigvars%EF%BC%89\" title=\"&#9317;&#12464;&#12525;&#12540;&#12496;&#12523;&#22793;&#25968;&#12398;&#20351;&#12356;&#22238;&#12375;&#65288;projectConfig.vars&#65289;\">&#9317;&#12464;&#12525;&#12540;&#12496;&#12523;&#22793;&#25968;&#12398;&#20351;&#12356;&#22238;&#12375;&#65288;projectConfig.vars&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A6JavaScript%E3%81%AB%E3%82%88%E3%82%8B%E8%A4%87%E9%9B%91%E3%81%AA%E9%9B%86%E8%A8%88%EF%BC%88CREATE_TEMP_FUNCTION%EF%BC%89\" title=\"&#9318;JavaScript&#12395;&#12424;&#12427;&#35079;&#38609;&#12394;&#38598;&#35336;&#65288;CREATE TEMP FUNCTION&#65289;\">&#9318;JavaScript&#12395;&#12424;&#12427;&#35079;&#38609;&#12394;&#38598;&#35336;&#65288;CREATE TEMP FUNCTION&#65289;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A7%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E5%A4%96%E9%83%A8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%8C%96\" title=\"&#9319;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12398;&#22806;&#37096;&#12486;&#12540;&#12502;&#12523;&#21270;\">&#9319;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12398;&#22806;&#37096;&#12486;&#12540;&#12502;&#12523;&#21270;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A8%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0\" title=\"&#9320;&#12497;&#12540;&#12486;&#12451;&#12471;&#12519;&#12491;&#12531;&#12464;\">&#9320;&#12497;&#12540;&#12486;&#12451;&#12471;&#12519;&#12491;&#12531;&#12464;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A9%E3%81%9D%E3%81%AE%E4%BB%96%E7%B4%B0%E3%81%8B%E3%81%84config%E8%A8%AD%E5%AE%9A\" title=\"&#9321;&#12381;&#12398;&#20182;&#32048;&#12363;&#12356;config&#35373;&#23450;\">&#9321;&#12381;&#12398;&#20182;&#32048;&#12363;&#12356;config&#35373;&#23450;<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E3%81%BE%E3%81%A8%E3%82%81\" title=\"&#12414;&#12392;&#12417;\">&#12414;&#12392;&#12417;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E3%81%8A%E3%81%BE%E3%81%91%EF%BC%9ADataform%E3%81%A8GitHub%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA%E6%96%B9%E6%B3%95\" title=\"&#12362;&#12414;&#12369;&#65306;Dataform&#12392;GitHub&#12392;&#12398;&#36899;&#25658;&#26041;&#27861;\">&#12362;&#12414;&#12369;&#65306;Dataform&#12392;GitHub&#12392;&#12398;&#36899;&#25658;&#26041;&#27861;<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A0GitHub%E3%81%AE%E8%A8%AD%E5%AE%9A\" title=\"&#9312;GitHub&#12398;&#35373;&#23450;\">&#9312;GitHub&#12398;&#35373;&#23450;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A1Secret_Manager%E3%81%AE%E8%A8%AD%E5%AE%9A\" title=\"&#9313;Secret Manager&#12398;&#35373;&#23450;\">&#9313;Secret Manager&#12398;&#35373;&#23450;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A2IAM%E8%A8%AD%E5%AE%9A\" title=\"&#9314;IAM&#35373;&#23450;\">&#9314;IAM&#35373;&#23450;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A3Dataform%E3%81%AE%E8%A8%AD%E5%AE%9A\" title=\"&#9315;Dataform&#12398;&#35373;&#23450;\">&#9315;Dataform&#12398;&#35373;&#23450;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A4Dataform%E3%81%8B%E3%82%89Git%E3%81%ABPUSH%E3%81%99%E3%82%8B\" title=\"&#9316;Dataform&#12363;&#12425;Git&#12395;PUSH&#12377;&#12427;\">&#9316;Dataform&#12363;&#12425;Git&#12395;PUSH&#12377;&#12427;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/takuminasuno.com\/ja\/20250126_dataform_ja\/#%E2%91%A5%E3%81%9D%E3%81%97%E3%81%A6Git%E4%BD%9C%E6%A5%AD%E3%81%B8\" title=\"&#9317;&#12381;&#12375;&#12390;Git&#20316;&#26989;&#12408;\">&#9317;&#12381;&#12375;&#12390;Git&#20316;&#26989;&#12408;<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81\"><\/span>&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#27010;&#35201;<span class=\"ez-toc-section-end\"><\/span><\/h3><p>&#20803;&#12392;&#12394;&#12427;&#12487;&#12540;&#12479;&#12477;&#12540;&#12473;&#12398;&#12469;&#12531;&#12503;&#12523;&#12399;&#20197;&#19979;&#12398;5&#12486;&#12540;&#12502;&#12523;&#12391;&#12377;&#12290;&#23567;&#22770;&#26989;&#12398;&#22770;&#19978;&#12487;&#12540;&#12479;&#12395;&#12394;&#12426;&#12414;&#12377;&#12364;&#12289;EC&#20027;&#20307;&#12391;&#12289;&#24215;&#38957;&#12391;&#12398;&#12499;&#12472;&#12493;&#12473;&#12418;&#23567;&#35215;&#27169;&#12394;&#12364;&#12425;&#23637;&#38283;&#12375;&#12390;&#12356;&#12427;&#12499;&#12472;&#12493;&#12473;&#12434;&#12452;&#12513;&#12540;&#12472;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;<\/p><ol>\n<li><strong>ec_order<\/strong> - EC&#12398;&#27880;&#25991;&#23653;&#27508;&#12290;<\/li>\n<li><strong>ec_order_line<\/strong> - EC&#12398;&#27880;&#25991;&#26126;&#32048;&#12290;&#27880;&#25991;&#23653;&#27508;&#12395;&#32016;&#12389;&#12356;&#12390;&#12289;&#21830;&#21697;&#12372;&#12392;&#12395;&#12524;&#12467;&#12540;&#12489;&#12364;&#29983;&#25104;&#12373;&#12428;&#12427;&#12290;<\/li>\n<li><strong>ec_product<\/strong> - EC&#12398;&#21830;&#21697;&#19968;&#35239;&#12290;<\/li>\n<li><strong>ec_customer<\/strong> - EC&#12398;&#39015;&#23458;&#19968;&#35239;&#12290;<\/li>\n<li><strong>shop_order_line<\/strong> - &#24215;&#38957;&#12398;&#27880;&#25991;&#26126;&#32048;&#12290;&#12471;&#12473;&#12486;&#12512;&#12398;&#20181;&#27096;&#12398;&#12383;&#12417;&#12289;&#12524;&#12471;&#12540;&#12488;&#12398;&#26126;&#32048;&#12372;&#12392;&#12398;&#12524;&#12467;&#12540;&#12489;&#12398;&#12415;&#23384;&#22312;&#12290;&#20250;&#21729;&#12459;&#12540;&#12489;&#12434;&#20351;&#29992;&#12375;&#12383;&#39015;&#23458;&#12395;&#12388;&#12356;&#12390;&#12399;&#12289;EC&#12398;&#26041;&#12398;&#39015;&#23458;ID&#12364;&#32016;&#12389;&#12367;&#12290;<\/li>\n<\/ol><p>&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#20013;&#12391;&#12399;&#12289;EC&#12392;&#24215;&#38957;&#12395;&#12414;&#12383;&#12364;&#12427;&#12487;&#12540;&#12479;&#12434;&#32113;&#21512;&#12375;&#12289;&#39015;&#23458;&#12381;&#12428;&#12382;&#12428;&#12395;&#12388;&#12356;&#12390;&#36092;&#20837;&#37329;&#38989;&#12420;&#36092;&#20837;&#38971;&#24230;&#12289;&#36092;&#20837;&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;&#12540;&#12289;&#20516;&#24341;&#12365;&#24863;&#24540;&#24230;&#12394;&#12393;&#12434;&#38598;&#35336;&#12375;&#12390;&#12289;&#26368;&#32066;&#30340;&#12395;&#12510;&#12540;&#12465;&#12486;&#12451;&#12531;&#12464;&#35251;&#28857;&#12391;&#12398;&#39015;&#23458;&#12475;&#12464;&#12513;&#12531;&#12488;&#12434;&#21106;&#12426;&#24403;&#12390;&#12427;&#12392;&#12371;&#12429;&#12414;&#12391;&#12434;&#12420;&#12426;&#12383;&#12356;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;<\/p><h3><span class=\"ez-toc-section\" id=\"%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AA%E3%83%8D%E3%83%BC%E3%82%B8\"><\/span>&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;<span class=\"ez-toc-section-end\"><\/span><\/h3><p>&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;&#65288;&#12487;&#12540;&#12479;&#12398;&#20966;&#29702;&#12398;&#27969;&#12428;&#65289;&#12399;&#12289;&#12486;&#12540;&#12502;&#12523;&#21336;&#20301;&#12391;&#26360;&#12367;&#12392;&#20197;&#19979;&#12398;&#12424;&#12358;&#12394;&#12452;&#12513;&#12540;&#12472;&#12391;&#12377;&#12290;<\/p><p>&#27880;&#25991;&#21336;&#20301;&#12391;&#29983;&#25104;&#12373;&#12428;&#12427;order&#12289;&#12381;&#12375;&#12390;order&#12398;&#20013;&#12398;&#32048;&#12363;&#12356;&#21830;&#21697;&#26126;&#32048;&#12398;&#24773;&#22577;&#12434;&#25345;&#12388;order_line&#12398;2&#31278;&#39006;&#12395;&#12388;&#12356;&#12390;&#12289;EC&#12392;&#24215;&#38957;&#12395;&#12414;&#12383;&#12364;&#12427;&#12487;&#12540;&#12479;&#12434;&#32113;&#21512;&#12375;&#12289;&#26368;&#32066;&#30340;&#12395;&#20001;&#12487;&#12540;&#12479;&#12434;&#38598;&#35336;&#12398;&#12358;&#12360;&#39015;&#23458;&#12475;&#12464;&#12513;&#12531;&#12488;&#12434;&#23450;&#32681;&#12377;&#12427;&#27969;&#12428;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><p><a href=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-sales-sample-data-lineage.drawio.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17701\" src=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-sales-sample-data-lineage.drawio.png\" alt=\"\" width=\"1944\" height=\"1500\"><\/a><\/p><p>&#35443;&#32048;&#12399;<a href=\"https:\/\/github.com\/takuminasuno\/dataform-sales-sample\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub&#12398;&#12522;&#12509;&#12472;&#12488;&#12522;<\/a>&#12395;&#35698;&#12426;&#12414;&#12377;&#12364;&#12289;SQL&#12392;&#12375;&#12390;&#12399;&#29305;&#27530;&#12394;&#27083;&#25991;&#12399;&#12381;&#12371;&#12414;&#12391;&#20351;&#12387;&#12390;&#12362;&#12425;&#12378;&#12289;SELECT&#21477;&#12289;WHERE&#21477;&#12289;GROUP BY&#21477;&#12289;ORDER BY&#21477;&#12289;JOIN&#21477;&#12289;WITH&#21477;&#12354;&#12383;&#12426;&#12364;&#20351;&#12360;&#12428;&#12400;&#22522;&#26412;&#30340;&#12395;&#12399;&#22823;&#19976;&#22827;&#12391;&#12377;&#12290;&#12383;&#12384;&#12375;&#12289;&#20197;&#19979;2&#28857;&#12395;&#12388;&#12356;&#12390;&#12399;&#30041;&#24847;&#12434;&#12375;&#12383;&#12358;&#12360;&#12391;&#27425;&#12398;&#31456;&#12395;&#36914;&#12415;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><ol>\n<li>customer&#12486;&#12540;&#12502;&#12523;&#12384;&#12369;&#12399;&#39015;&#23458;&#12475;&#12464;&#12513;&#12531;&#12488;&#12395;&#38598;&#32004;&#12377;&#12427;&#20966;&#29702;&#12434;SQL&#12391;&#12420;&#12426;&#20999;&#12427;&#12398;&#12364;&#22823;&#22793;&#12394;&#12383;&#12417;&#12289;&#12487;&#12540;&#12479;&#21152;&#24037;&#12398;&#19968;&#37096;&#12434;JavaScript&#12391;&#23450;&#32681;&#12375;&#12390;&#12356;&#12427;&#12290;<\/li>\n<li>&#21508;&#12487;&#12540;&#12479;&#12477;&#12540;&#12473;&#12364;&#29702;&#24819;&#30340;&#12391;&#12399;&#12394;&#12367;&#12384;&#12356;&#12406;&#27738;&#12356;&#12383;&#12417;&#12289;&#12356;&#12367;&#12388;&#12363;&#12414;&#12393;&#12429;&#12387;&#12371;&#12375;&#12356;&#12487;&#12540;&#12479;&#12398;&#21152;&#24037;&#12434;&#34892;&#12387;&#12390;&#12356;&#12427;&#12290;&#65288;&#8251;&#26368;&#24460;&#12398;&#12414;&#12392;&#12417;&#12391;&#30906;&#35469;&#12375;&#12414;&#12377;&#65289;<\/li>\n<\/ol><p>&#25945;&#31185;&#26360;&#36890;&#12426;&#12395;&#12399;&#12356;&#12363;&#12394;&#12356;&#12289;&#12392;&#12356;&#12358;&#12398;&#12364;&#29694;&#22580;&#12398;&#12487;&#12540;&#12479;&#20966;&#29702;&#12391;&#12377;&#12397;&hellip;&#12290;<\/p><h3><span class=\"ez-toc-section\" id=\"SQL%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AE%E5%9E%8B\"><\/span>SQL&#12395;&#12424;&#12427;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#22411;<span class=\"ez-toc-section-end\"><\/span><\/h3><p>&#12381;&#12428;&#12391;&#12399;&#12289;<a href=\"https:\/\/github.com\/takuminasuno\/dataform-sales-sample\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub&#12398;&#12522;&#12509;&#12472;&#12488;&#12522;<\/a>&#12395;&#12354;&#12427;&#12467;&#12540;&#12489;&#12434;&#21442;&#32771;&#12395;&#12289;Dataform&#12395;&#12424;&#12427;&#12487;&#12540;&#12479;&#20966;&#29702;&#12354;&#12427;&#12354;&#12427;&#12398;&#22411;&#12434;&#35211;&#12390;&#12356;&#12365;&#12383;&#12356;&#12392;&#24605;&#12356;&#12414;&#12377;&#12371;&#12428;&#12364;&#20840;&#12390;&#12391;&#12399;&#12394;&#12356;&#12391;&#12377;&#12364;&#12289;&#12371;&#12428;&#12425;&#12434;&#25276;&#12373;&#12360;&#12428;&#12400;&#26368;&#20302;&#38480;&#12398;&#22522;&#26412;&#12395;&#12399;&#12394;&#12427;&#12398;&#12363;&#12394;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;<\/p><p>&#12394;&#12362;&#12289;&#20803;&#12487;&#12540;&#12479;&#12392;&#12394;&#12427;<a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1nShXon7tEcSpm1jyVwl-ouYVAhpcln3Nzwuwhu1TiFI\/edit\" target=\"_blank\" rel=\"noopener noreferrer\">&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;<\/a>&#12418;&#12475;&#12483;&#12488;&#12391;&#20844;&#38283;&#12375;&#12390;&#12356;&#12427;&#12398;&#12391;&#12289;&#20341;&#12379;&#12390;&#12372;&#21033;&#29992;&#12367;&#12384;&#12373;&#12356;&#12290;&#12381;&#12428;&#12391;&#12399;&#35211;&#12390;&#12356;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><h4>&#9312;&#12486;&#12540;&#12502;&#12523;&#12398;&#26032;&#35215;&#20316;&#25104;&#65288;config.type:'table'&#65289;<\/h4><p>Dataform&#12399;config.type&#12395;&#12424;&#12387;&#12390;&#22522;&#26412;&#30340;&#12394;&#12487;&#12540;&#12479;&#20966;&#29702;&#12434;&#31777;&#26131;&#12395;&#23455;&#35013;&#12391;&#12365;&#12427;&#12424;&#12358;&#12395;&#12394;&#12387;&#12390;&#12362;&#12426;&#12289;&#12381;&#12398;&#12358;&#12385;&#12398;1&#12388;&#12364;&#12486;&#12540;&#12502;&#12523;&#12398;&#26032;&#35215;&#20316;&#25104;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;config.type:'table'&#12395;&#12390;&#23459;&#35328;&#12377;&#12427;&#12392;&#12289;SELECT&#25991;&#12434;&#26360;&#12367;&#12384;&#12369;&#12391;&#33258;&#21205;&#30340;&#12395;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#12387;&#12390;&#12367;&#12428;&#12427;&#12392;&#12356;&#12358;&#12418;&#12398;&#12391;&#12377;&#12290;<\/p><p>&#12467;&#12484;&#12399;&#12289;&#12459;&#12521;&#12512;&#21517;&#12434;&#23450;&#32681;&#12377;&#12427;&#22580;&#21512;&#12399;config.columns&#12395;&#35373;&#23450;&#12377;&#12427;&#12371;&#12392;&#12289;&#12381;&#12375;&#12390;&#20182;&#12398;&#12486;&#12540;&#12502;&#12523;&#12434;&#21442;&#29031;&#12377;&#12427;&#12392;&#12365;&#12399; ${ref('ec_product')}&nbsp;&#12398;&#12424;&#12358;&#12395;&#20182;&#12398;SQLX&#12501;&#12449;&#12452;&#12523;&#12391;&#23450;&#32681;&#12375;&#12383;&#12486;&#12540;&#12502;&#12523;&#12398;name&#12434;ref&#12395;&#12424;&#12427;&#21442;&#29031;&#35352;&#27861;&#12398;&#20013;&#12395;&#20837;&#12428;&#12427;&#12371;&#12392;&#12391;&#12377;&#12397;&#12290;<\/p><p>&#20363;&#12360;&#12400;product&#12398;&#12486;&#12540;&#12502;&#12523;&#20316;&#25104;&#12399;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12394;SQL&#12391;&#23455;&#35013;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&#12385;&#12394;&#12415;&#12395;&#12385;&#12423;&#12387;&#12392;&#12375;&#12383;&#12487;&#12540;&#12479;&#21152;&#24037;&#12392;&#12375;&#12390;&#38971;&#20986;&#12377;&#12427;&#12398;&#12364;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12394;WHERE&#21477;&#12420;ORDER BY&#21477;&#12391;&#12377;&#12290;<\/p><ul>\n<li>WHERE&#21477;&#12395;&#12424;&#12387;&#12390;&#12289;&#21830;&#21697;ID&#12364;&#12354;&#12427;&#12524;&#12467;&#12540;&#12489;&#12395;&#32094;&#12387;&#12390;&#12356;&#12427;&#12290;<br>\n&#8251;&#19968;&#33324;&#30340;&#12394;&#31561;&#20385;&#28436;&#31639;&#23376;&#12420;&#27604;&#36611;&#28436;&#31639;&#23376;&#12384;&#12369;&#12391;&#12394;&#12367;&#12289;NOT&#12420;IN&#12394;&#12393;&#12398;&#28436;&#31639;&#23376;&#12420;&#12289;LIKE&#12420; REGEXP_CONTAINS&#28436;&#31639;&#23376;&#12395;&#12424;&#12427;&#26326;&#26151;&#19968;&#33268;&#12394;&#12393;&#12434;&#20351;&#12387;&#12390;&#12356;&#12367;&#12371;&#12392;&#12395;&#12394;&#12427;&#12398;&#12391;&#12289;&#28436;&#31639;&#23376;&#12395;&#12388;&#12356;&#12390;&#12399;&#12375;&#12387;&#12363;&#12426;&#25276;&#12373;&#12360;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/li>\n<li>ORDER BY&#21477;&#12395;&#12424;&#12387;&#12390;&#12289;&#21830;&#21697;ID&#12391;&#26119;&#38918;&#12395;&#12524;&#12467;&#12540;&#12489;&#12434;&#20006;&#12403;&#26367;&#12360;&#12390;&#12356;&#12427;&#12290;<br>\n&#8251;&#26119;&#38918;(ASC)&#12363;&#38477;&#38918;(DESC)&#12363;&#12399;&#30465;&#30053;&#12391;&#12365;&#12289;&#30465;&#30053;&#12377;&#12427;&#12392;&#33258;&#21205;&#30340;&#12395;&#26119;&#38918;(ASC)&#12392;&#12394;&#12426;&#12414;&#12377;&#12364;&#12289;&#12401;&#12387;&#12392;&#35211;&#12391;&#12399;&#20998;&#12363;&#12426;&#12389;&#12425;&#12356;&#12398;&#12391;&#20491;&#20154;&#30340;&#12395;&#12399;&#26126;&#31034;&#30340;&#12395;&#26360;&#12367;&#26041;&#12364;&#12424;&#12356;&#12392;&#32771;&#12360;&#12390;&#12356;&#12414;&#12377;&#12290;<\/li>\n<\/ul><pre class=\"lang:default decode:true\" title=\"definitions\/output\/product.sqlx\">config {\r\n  type: 'table',\r\n  schema: 'sales_sample_output',\r\n  name: 'product',\r\n  description: '&#21830;&#21697;&#19968;&#35239;',\r\n  columns: {\r\n    product_id: '&#21830;&#21697;ID',\r\n    product_name: '&#21830;&#21697;&#21517;',\r\n    product_category: '&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;',\r\n    product_price: '&#21830;&#21697;&#20385;&#26684;',\r\n    product_average_cost: '&#21830;&#21697;&#24179;&#22343;&#21407;&#20385;'\r\n  },\r\n  tags: ['01_clensing_from_outer_tables']\r\n}\r\n\r\nSELECT\r\n  product_id,\r\n  product_name,\r\n  product_category,\r\n  product_price,\r\n  product_average_cost\r\nFROM\r\n  ${ref('ec_product')}\r\nWHERE\r\n  product_id IS NOT NULL\r\nORDER BY\r\n  product_id ASC<\/pre><p>&#12394;&#12362;&#12289;&#12371;&#12398;config.type:'table'&#12399;&#12289;&#12459;&#12521;&#12512;&#12398;&#12487;&#12540;&#12479;&#22411;&#12364;&#33258;&#21205;&#23450;&#32681;&#12373;&#12428;&#12427;&#28857;&#12395;&#12399;&#27880;&#24847;&#12364;&#24517;&#35201;&#12391;&#12377;&#12290;&#12459;&#12521;&#12512;&#12398;&#12487;&#12540;&#12479;&#22411;&#12434;&#38291;&#25509;&#30340;&#12395;&#23450;&#32681;&#12375;&#12383;&#12356;&#22580;&#21512;&#12399;&#12289;SELECT&#25991;&#12398;&#20013;&#12391;&#24847;&#22259;&#30340;&#12395;&#12461;&#12515;&#12473;&#12488;&#65288;&#22411;&#22793;&#25563;&#65289;&#12377;&#12427;&#12363;&#12289;&#12418;&#12375;&#12367;&#12399;&#24460;&#36848;&#12377;&#12427;config.type:'operations'&#12391;&#23550;&#24540;&#12377;&#12427;&#26041;&#12364;&#12424;&#12356;&#12391;&#12375;&#12423;&#12358;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A1%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%EF%BC%88GROUP_BY%E5%8F%A5%EF%BC%89\"><\/span>&#9313;&#12464;&#12523;&#12540;&#12503;&#21270;&#65288;GROUP BY&#21477;&#65289;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>BigQuery&#12398;&#38598;&#35336;&#12392;&#35328;&#12360;&#12400;&#12289;&#12414;&#12378;&#12399;GROUP BY&#21477;&#12391;&#12375;&#12423;&#12358;&#12290;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#31995;&#12398;&#12487;&#12540;&#12479;&#12434;&#12289;&#27096;&#12293;&#12394;&#21336;&#20301;&#12391;&#38598;&#32004;&#12539;&#38598;&#35336;&#12377;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;&#12464;&#12523;&#12540;&#12503;&#21270;&#12377;&#12427;&#12461;&#12540;&#12392;&#12394;&#12427;&#12459;&#12521;&#12512;&#12399;GROUP BY&#12398;&#24460;&#12395;&#35352;&#36848;&#12375;&#12388;&#12388;&#12289;&#12381;&#12428;&#20197;&#22806;&#12398;&#12459;&#12521;&#12512;&#12399;&#38598;&#32004;&#38306;&#25968;&#65288;MIN, MAX, SUM, COUNT&#12394;&#12393;&#65289;&#12395;&#20837;&#12428;&#12390;&#12362;&#12365;&#12414;&#12377;&#12290;<\/p><p>&#20170;&#22238;&#20363;&#12395;&#25369;&#12370;&#12390;&#12356;&#12427;&#36092;&#36023;&#12487;&#12540;&#12479;&#12391;&#12354;&#12428;&#12400;&#12289;&#39015;&#23458;&#21336;&#20301;&#12395;&#38598;&#32004;&#12377;&#12427;&#38598;&#35336;&#12364;&#38971;&#20986;&#12375;&#12414;&#12377;&#12290;&#20363;&#12360;&#12400;customer_order_total&#12398;&#12486;&#12540;&#12502;&#12523;&#12391;&#12377;&#12290;<\/p><p>GROUP BY&#21477;&#12434;&#23455;&#38555;&#12395;&#26360;&#12367;&#12392;&#12365;&#12399;&#12289;&#20182;&#12398;&#21477;&#12392;&#12475;&#12483;&#12488;&#12391;&#20351;&#12358;&#12371;&#12392;&#12364;&#22810;&#12356;&#12391;&#12377;&#12364;&#12289;WHERE&#21477;&#12398;&#24460;&#12289;ORDER BY&#21477;&#12398;&#21069;&#12395;&#26360;&#12367;&#12392;&#35226;&#12360;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><pre class=\"lang:default decode:true\" title=\"definitions\/output\/customer_order_total.sqlx\">config {\r\n  type: 'table',\r\n  schema: 'sales_sample_output',\r\n  name: 'customer_order_total',\r\n  description: '&#39015;&#23458;&#27880;&#25991;&#65288;&#32047;&#35336;&#65289;',\r\n  tags: ['02_creating_from_inner_tables']\r\n}\r\n\r\nSELECT\r\n  customer_id,\r\n  MIN(create_date) AS first_purchase_date,\r\n  MAX(create_date) AS last_purchase_date,\r\n  SUM(price) AS total_purchase_amount,\r\n  COUNT(unified_order_id) AS total_purchase_count,\r\n  SUM(total_discount) AS total_purchase_discount,\r\n  ROUND(SUM(total_discount) \/ SUM(price),3) AS total_discount_rate\r\nFROM\r\n  ${ref('order')}\r\nWHERE\r\n  customer_id IS NOT NULL\r\nGROUP BY\r\n  customer_id<\/pre><p>&#8251;&#21442;&#29031;&#12377;&#12427;&#12371;&#12392;&#12398;&#23569;&#12394;&#12356;&#20013;&#38291;&#12486;&#12540;&#12502;&#12523;&#12394;&#12398;&#12391;&#12289;&#12459;&#12521;&#12512;&#12398;description&#12399;&#30465;&#30053;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&#12371;&#12428;&#12368;&#12425;&#12356;&#12398;&#34892;&#25968;&#12384;&#12392;&#12471;&#12531;&#12503;&#12523;&#12391;&#35211;&#12420;&#12377;&#12356;&#12391;&#12377;&#12397;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A2%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%B8%E3%81%AE%E3%83%9E%E3%82%B9%E3%82%BF%E7%B5%90%E5%90%88%EF%BC%88LEFT_JOIN%E5%8F%A5%EF%BC%89\"><\/span>&#9314;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12408;&#12398;&#12510;&#12473;&#12479;&#32080;&#21512;&#65288;LEFT JOIN&#21477;&#65289;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>GROUP BY&#21477;&#12392;&#21516;&#12376;&#12367;&#12425;&#12356;&#22810;&#12356;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;1&#12388;&#12364;&#12289;LEFT JOIN&#21477;&#12395;&#12424;&#12427;&#12510;&#12473;&#12479;&#32080;&#21512;&#12384;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&#12381;&#12418;&#12381;&#12418;JOIN&#21477;&#12399;&#12289;LEFT JOIN&#20197;&#22806;&#12395;&#12418;&#12356;&#12367;&#12388;&#12363;&#31278;&#39006;&#12399;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;&#12371;&#12371;&#12391;&#12399;LEFT JOIN&#12384;&#12369;&#12434;&#32057;&#20171;&#12375;&#12414;&#12377;&#12290;&#27671;&#12395;&#12394;&#12427;&#26041;&#12399;&#35519;&#12409;&#12390;&#12415;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;<\/p><p>&#12487;&#12540;&#12479;&#12505;&#12540;&#12473;&#12391;&#12399;&#12300;&#35504;&#12364;&#12289;&#12356;&#12388;&#12289;&#12393;&#12371;&#12391;&#12289;&#20309;&#12434;&#12289;&#12393;&#12358;&#12375;&#12383;&#12301;&#12392;&#12356;&#12358;&#23653;&#27508;&#12391;&#12354;&#12427;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12487;&#12540;&#12479;&#12434;&#20445;&#25345;&#12375;&#12414;&#12377;&#12364;&#12289;&#22810;&#12367;&#12398;&#22580;&#21512;&#12289;&#12371;&#12398;&#12300;&#35504;&#12364;&#12301;&#12300;&#12393;&#12371;&#12391;&#12301;&#12300;&#20309;&#12434;&#12301;&#12392;&#12356;&#12387;&#12383;&#12487;&#12540;&#12479;&#12399;ID&#12384;&#12369;&#12434;&#25345;&#12385;&#12289;&#12381;&#12398;ID&#12395;&#32016;&#12389;&#12367;&#38745;&#30340;&#12394;&#35443;&#32048;&#12487;&#12540;&#12479;&#12434;&#21029;&#12398;&#12510;&#12473;&#12479;&#12486;&#12540;&#12502;&#12523;&#12395;&#20445;&#25345;&#12375;&#12414;&#12377;&#12290;<\/p><p>&#20363;&#12360;&#12400;&#36092;&#36023;&#12487;&#12540;&#12479;&#12391;&#12354;&#12428;&#12400;&#12289;&#21830;&#21697;ID&#12395;&#32016;&#12389;&#12367;&#24418;&#12391;&#21830;&#21697;&#24773;&#22577;&#12434;&#25972;&#29702;&#12375;&#12289;&#12381;&#12428;&#12434;&#21830;&#21697;&#19968;&#35239;&#12398;&#12486;&#12540;&#12502;&#12523;&#12392;&#12375;&#12390;&#29420;&#31435;&#12375;&#12390;&#31649;&#29702;&#12375;&#12364;&#12385;&#12391;&#12377;&#12290;&#32080;&#26524;&#12289;&#36092;&#36023;&#23653;&#27508;&#12398;&#12486;&#12540;&#12502;&#12523;&#12395;&#12399;&#12300;&#20309;&#12434;&#36023;&#12387;&#12383;&#12363;&#12301;&#12434;&#34920;&#12377;&#21830;&#21697;ID&#12399;&#12354;&#12427;&#12418;&#12398;&#12398;&#12289;&#12381;&#12398;&#21830;&#21697;&#21517;&#12420;&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;&#12289;&#23450;&#20385;&#12420;&#21407;&#20385;&#12394;&#12393;&#12399;&#21830;&#21697;&#19968;&#35239;&#12398;&#12486;&#12540;&#12502;&#12523;&#12434;&#21442;&#29031;&#12377;&#12427;&#24517;&#35201;&#12364;&#20986;&#12390;&#12365;&#12414;&#12377;&#12290;<\/p><p>&#12487;&#12540;&#12479;&#20998;&#26512;&#12398;&#38555;&#12395;&#12399;&#12381;&#12358;&#12356;&#12387;&#12383;&#24773;&#22577;&#12434;&#20184;&#19982;&#12375;&#12383;&#12358;&#12360;&#12391;&#12487;&#12540;&#12479;&#12434;&#35211;&#12427;&#12371;&#12392;&#12364;&#24517;&#35201;&#19981;&#21487;&#27424;&#12394;&#12398;&#12391;&#12289;LEFT JOIN&#21477;&#12399;&#38750;&#24120;&#12395;&#37325;&#35201;&#12395;&#12394;&#12387;&#12390;&#12356;&#12414;&#12377;&#12290;<\/p><p>&#20855;&#20307;&#20363;&#12392;&#12375;&#12390;&#12289;shop_order_line_with_discount&#12398;SQL&#12434;&#35211;&#12390;&#12415;&#12414;&#12377;&#12290;&#20808;&#12411;&#12393;&#12392;&#21516;&#12376;&#12424;&#12358;&#12395;config.type:'table'&#12391;&#12486;&#12540;&#12502;&#12523;&#20316;&#25104;&#12375;&#12390;&#12356;&#12414;&#12377;&#12364;&#12289;SELECT&#25991;&#12398;&#20013;&#12395;LEFT JOIN&#12364;&#20837;&#12387;&#12390;&#12356;&#12414;&#12377;&#12397;&#12290;<\/p><pre class=\"lang:default decode:true\">config {\r\n  type: 'table',\r\n  schema: 'sales_sample_output',\r\n  name: 'shop_order_line_with_discount',\r\n  description: '&#24215;&#38957;&#27880;&#25991;&#26126;&#32048;&#65288;&#20516;&#24341;&#12365;&#24773;&#22577;&#20877;&#29694;&#65289;',\r\n  columns: {\r\n    receipt_id: '&#12524;&#12471;&#12540;&#12488;ID',\r\n    order_line_index: '&#26126;&#32048;&#30058;&#21495;',\r\n    create_date: '&#26085;&#20184;',\r\n    product_name: '&#21830;&#21697;&#21517;',\r\n    product_id: '&#21830;&#21697;ID',\r\n    product_category: '&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;',\r\n    quantity: '&#25968;&#37327;',\r\n    line_price: '&#26126;&#32048;&#20385;&#26684;',\r\n    line_discount: '&#26126;&#32048;&#20516;&#24341;&#12365;&#38989;',\r\n    line_price_before_discount: '&#20516;&#24341;&#12365;&#21069;&#26126;&#32048;&#20385;&#26684;',\r\n    customer_id: '&#39015;&#23458;ID'\r\n  },\r\n  bigquery: {\r\n    partitionBy: 'create_date'\r\n  },\r\n  tags: ['01_clensing_from_outer_tables']\r\n}\r\n\r\nSELECT\r\n  s.receipt_id,\r\n  s.order_line_index,\r\n  s.created_at AS create_date,\r\n  s.product_name,\r\n  p.product_id,\r\n  p.product_category,\r\n  s.quantity,\r\n  s.price AS line_price,\r\n  s.quantity * p.product_price - s.price AS line_discount,\r\n  s.quantity * p.product_price AS line_price_before_discount,\r\n  s.customer_id\r\nFROM ${ref('shop_order_line')} s\r\nLEFT JOIN ${ref('product')} p\r\n  ON s.product_name = p.product_name<\/pre><p>&#12509;&#12452;&#12531;&#12488;&#12392;&#12375;&#12390;&#12289;LEFT JOIN&#12434;&#12377;&#12427;&#38555;&#12399;SQL&#12398;&#20013;&#12395;&#35079;&#25968;&#12398;&#12486;&#12540;&#12502;&#12523;&#12364;&#30331;&#22580;&#12377;&#12427;&#12383;&#12417;&#12289;&#12393;&#12398;&#12486;&#12540;&#12502;&#12523;&#12398;&#12459;&#12521;&#12512;&#12363;&#21306;&#21029;&#12377;&#12427;&#12383;&#12417;&#12395;&#12289;&#12459;&#12521;&#12512;&#12434;{table_name}.{column_name}&#12391;&#26126;&#31034;&#30340;&#12395;&#23450;&#32681;&#12377;&#12427;&#12424;&#12358;&#12395;&#12375;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><p>&#12394;&#12362;&#12289;{table_name}&#12399;&#25991;&#23383;&#25968;&#12364;&#38263;&#12356;&#22580;&#21512;&#12364;&#22810;&#12356;&#12383;&#12417;&#12289;SQL&#19978;&#12391;&#12399;&#30465;&#30053;&#12377;&#12427;&#12371;&#12392;&#12364;&#22810;&#12356;&#12391;&#12377;&#12290;&#12486;&#12540;&#12502;&#12523;&#21517;&#12398;&#38957;&#25991;&#23383;&#12434;&#20351;&#12387;&#12383;&#12426;&#12289;a,b,c&#12398;&#12424;&#12358;&#12394;&#12450;&#12523;&#12501;&#12449;&#12505;&#12483;&#12488;&#12398;&#22987;&#12417;&#12398;&#25991;&#23383;&#12434;&#20351;&#12387;&#12383;&#12426;&#12377;&#12427;&#12371;&#12392;&#12364;&#22810;&#12356;&#12391;&#12377;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A3%E8%A4%87%E6%95%B0%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E7%B5%B1%E5%90%88%EF%BC%88UNION_ALL%E5%8F%A5%EF%BC%89\"><\/span>&#9315;&#35079;&#25968;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12398;&#32113;&#21512;&#65288;UNION ALL&#21477;&#65289;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>LEFT JOIN&#21477;&#12395;&#27425;&#12356;&#12391;&#38971;&#20986;&#12377;&#12427;&#12398;&#12364;&#12289;UNION ALL&#12395;&#12424;&#12427;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12398;&#32113;&#21512;&#12391;&#12377;&#12290;&#35079;&#25968;&#12398;&#12486;&#12540;&#12502;&#12523;&#12395;&#20998;&#12363;&#12428;&#12390;&#12356;&#12427;&#21516;&#22411;&#12398;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12434;&#12289;&#12459;&#12521;&#12512;&#27083;&#25104;&#12434;&#25972;&#12360;&#12388;&#12388;&#32113;&#21512;&#12375;&#12414;&#12377;&#12290;<\/p><p>&#20855;&#20307;&#20363;&#12392;&#12375;&#12390;&#12289;order&#12486;&#12540;&#12502;&#12523;&#12398;SQL&#65288;&#8251;&#24460;&#36848;&#12377;&#12427;&#24046;&#20998;&#21516;&#26399;&#20966;&#29702;&#12398;&#19968;&#37096;&#12394;&#12398;&#12391;&#30041;&#24847;&#12398;&#12371;&#12392;&#65289;&#12434;&#25244;&#31883;&#12375;&#12414;&#12377;&#12290;&#12371;&#12398;&#20363;&#12391;&#12399;&#12289;&#24215;&#38957;&#12398;&#22770;&#19978;&#12487;&#12540;&#12479;&#12392;EC&#12398;&#22770;&#19978;&#12487;&#12540;&#12479;&#12434;&#32113;&#21512;&#12375;&#12390;1&#12388;&#12398;&#12486;&#12540;&#12502;&#12523;&#12395;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;<\/p><p>&#12459;&#12521;&#12512;&#27083;&#25104;&#12364;&#19968;&#33268;&#12375;&#12390;&#12356;&#12427;&#12371;&#12392;&#12364;&#24517;&#38920;&#12391;&#12354;&#12427;&#12383;&#12417;&#12289;&#24046;&#20998;&#12364;&#12354;&#12427;&#22580;&#21512;&#12399;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#21508;&#12459;&#12521;&#12512;&#12434;&#25972;&#12360;&#12390;&#12354;&#12370;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\" title=\"definitions\/output\/order.sqlx &#8251;&#25244;&#31883;\">CREATE OR REPLACE TABLE `sales_sample_intermediate.order_incremental` AS (\r\n  -- &#24215;&#38957;&#12487;&#12540;&#12479;&#12434;&#29983;&#25104;\r\n  SELECT\r\n    CONCAT('S_',receipt_id) AS unified_order_id,\r\n    create_date,\r\n    NULL AS create_datetime,\r\n    customer_id,\r\n    price,\r\n    price_before_discount,\r\n    total_discount,\r\n    total_line_discount,\r\n    order_discount,\r\n    '&#24215;&#38957;' AS sales_channel\r\n  FROM\r\n    ${ref('shop_order')}\r\n  WHERE\r\n    create_date ${dataform.projectConfig.vars.EQUALS_CALC_DATETIME}\r\n  \r\n  -- EC&#12487;&#12540;&#12479;&#12434;&#32080;&#21512;\r\n  UNION ALL\r\n  SELECT\r\n    CONCAT('E_',order_id) AS unified_order_id,\r\n    DATE(created_at) AS create_date,\r\n    created_at AS create_datetime,\r\n    customer_id,\r\n    price,\r\n    price_before_discount,\r\n    total_discount,\r\n    total_line_discount,\r\n    order_discount,\r\n    'EC' AS sales_channel\r\n  FROM\r\n    ${ref('ec_order')}\r\n  WHERE\r\n    created_at ${dataform.projectConfig.vars.EQUALS_CALC_DATETIME}\r\n\r\n  -- &#12510;&#12540;&#12472;&#12375;&#12383;&#24460;&#12395;&#12477;&#12540;&#12488;\r\n  ORDER BY create_date ASC, customer_id ASC\r\n);<\/pre><p>&#25276;&#12373;&#12360;&#12390;&#12362;&#12365;&#12383;&#12356;&#12509;&#12452;&#12531;&#12488;&#12399;&#12289;&#12477;&#12540;&#12488;&#12377;&#12427;&#12479;&#12452;&#12511;&#12531;&#12464;&#12391;&#12375;&#12423;&#12358;&#12290;UNION ALL&#12391;&#36275;&#12375;&#12383;&#24460;&#12395;&#12289;&#26368;&#24460;&#12395;&#20840;&#20307;&#12395;&#23550;&#12375;&#12390;&#12477;&#12540;&#12488;&#12434;&#21177;&#12363;&#12379;&#12427;&#12424;&#12358;&#12394;&#32622;&#12365;&#26041;&#12394;&#12398;&#12391;&#27880;&#24847;&#12375;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A4%E5%B7%AE%E5%88%86%E5%87%A6%E7%90%86%E3%81%AE%E5%AE%9F%E8%A3%85%EF%BC%88MERGE%E5%8F%A5%EF%BC%89\"><\/span>&#9316;&#24046;&#20998;&#20966;&#29702;&#12398;&#23455;&#35013;&#65288;MERGE&#21477;&#65289;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#31995;&#12398;&#12487;&#12540;&#12479;&#12399;&#26085;&#12293;&#22679;&#12360;&#12390;&#12356;&#12367;&#12383;&#12417;&#12289;&#20840;&#25968;&#12398;&#12487;&#12540;&#12479;&#12434;&#23450;&#26399;&#30340;&#12395;&#12463;&#12524;&#12531;&#12472;&#12531;&#12464;&#23550;&#35937;&#12420;&#38598;&#35336;&#23550;&#35937;&#12395;&#12375;&#12390;&#12356;&#12383;&#12425;BigQuery&#12398;&#12473;&#12461;&#12515;&#12531;&#37327;&#12289;&#12388;&#12414;&#12426;&#35531;&#27714;&#38989;&#12364;&#21152;&#36895;&#24230;&#30340;&#12395;&#22679;&#12360;&#12390;&#12356;&#12365;&#12414;&#12377;&#12290;&#12381;&#12398;&#12383;&#12417;&#12289;&#19968;&#23450;&#20197;&#19978;&#12398;&#37327;&#65288;&#21021;&#26399;&#12398;&#12508;&#12522;&#12517;&#12540;&#12512;&#12394;&#12356;&#12375;&#32933;&#22823;&#21270;&#36895;&#24230;&#12398;&#35251;&#28857;&#12391;&#65289;&#12364;&#12354;&#12427;&#12486;&#12540;&#12502;&#12523;&#12395;&#12388;&#12356;&#12390;&#12399;&#12289;&#26356;&#26032;&#12373;&#12428;&#12383;&#12487;&#12540;&#12479;&#12384;&#12369;&#12434;&#20966;&#29702;&#12377;&#12427;&#24046;&#20998;&#20966;&#29702;&#12398;&#23455;&#35013;&#12364;&#37325;&#35201;&#12395;&#12394;&#12387;&#12390;&#12365;&#12414;&#12377;&#12290;<\/p><p>Dataform&#12391;&#12418;&#24046;&#20998;&#20966;&#29702;&#12399;&#12469;&#12509;&#12540;&#12488;&#12373;&#12428;&#12390;&#12362;&#12426;&#12289;<a href=\"https:\/\/cloud.google.com\/dataform\/docs\/incremental-tables?hl=ja\" target=\"_blank\" rel=\"noopener noreferrer\">config.type:'incremental'<\/a>&#12395;&#12424;&#12387;&#12390;&#31777;&#21336;&#12395;&#23455;&#35013;&#21487;&#33021;&#12394;&#12398;&#12391;&#12377;&#12364;&#12289;&#22823;&#12365;&#12394;&#33853;&#12392;&#12375;&#31348;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#12392;&#12356;&#12358;&#12398;&#12418;&#12289;&#12371;&#12428;&#12399;&#12356;&#12431;&#12422;&#12427;upsert&#12398;&#12415;&#65288;update&#12392;insert&#65289;&#12364;&#23550;&#35937;&#12392;&#12394;&#12387;&#12390;&#12362;&#12426;&#12289;&#20803;&#12487;&#12540;&#12479;&#12364;delete&#12373;&#12428;&#12383;&#12392;&#12365;&#12399;&#20966;&#29702;&#12398;&#23550;&#35937;&#22806;&#12392;&#12394;&#12387;&#12390;&#12356;&#12427;&#12398;&#12391;&#12377;&#12290;<\/p><p>&#12418;&#12385;&#12429;&#12435;&#23455;&#34892;&#26178;&#12458;&#12503;&#12471;&#12519;&#12531;&#12391; [&#23436;&#20840;&#12395;&#26356;&#26032;&#12375;&#12390;&#23455;&#34892;&#12377;&#12427;] &#12395;&#12481;&#12455;&#12483;&#12463;&#12434;&#20837;&#12428;&#12427;&#12371;&#12392;&#12391;&#20840;&#12487;&#12540;&#12479;&#12434;&#20877;&#35336;&#31639;&#12375;&#12390;&#20803;&#12486;&#12540;&#12502;&#12523;&#12398;delete&#12373;&#12428;&#12383;&#12524;&#12467;&#12540;&#12489;&#12418;&#12465;&#12450;&#12377;&#12427;&#12371;&#12392;&#12399;&#21487;&#33021;&#12391;&#12377;&#12364;&#12289;&#20803;&#12487;&#12540;&#12479;&#12398;delete&#12364;&#23450;&#26399;&#30340;&#12395;&#36215;&#12371;&#12427;&#36939;&#29992;&#12395;&#12362;&#12356;&#12390;&#12399;&#12354;&#12414;&#12426;&#26395;&#12414;&#12375;&#12356;&#20966;&#29702;&#12391;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;<\/p><p>delete&#12418;&#21547;&#12417;&#12390;&#12522;&#12450;&#12523;&#12479;&#12452;&#12512;&#12394;&#21516;&#26399;&#12434;&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;&#12354;&#12428;&#12400;&#12289;&#32047;&#31309;&#12486;&#12540;&#12502;&#12523;&#12289;&#24046;&#20998;&#12486;&#12540;&#12502;&#12523;&#12434;SQL&#12391;&#20316;&#12426;&#12289;MERGE&#21477;&#12395;&#12424;&#12387;&#12390;INSERT, UPDATE, DELETE&#12381;&#12428;&#12382;&#12428;&#12398;&#22580;&#21512;&#12434;&#24459;&#20736;&#12395;&#23455;&#35013;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#24184;&#12356;&#12289;Dataform&#12391;&#12399;config.type:'operations'&#12395;&#12424;&#12387;&#12390;&#33258;&#30001;&#12395;SQL&#12434;&#26360;&#12369;&#12427;&#12398;&#12391;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12394;&#23455;&#35013;&#12364;&#21487;&#33021;&#12395;&#12394;&#12387;&#12390;&#12356;&#12414;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\" title=\"definitions\/output\/order.sqlx\">config {\r\n  type: 'operations',\r\n  schema: 'sales_sample_output',\r\n  name: 'order',\r\n  description: '&#27880;&#25991;&#19968;&#35239;&#65288;&#24215;&#38957;&#12392;EC&#12434;&#32113;&#21512;&#65289;',\r\n  hasOutput: true,\r\n  tags: ['01_clensing_from_outer_tables']\r\n}\r\n\r\n-- (1\/3) &#21021;&#22238;&#12398;&#22580;&#21512;&#12289;&#32047;&#31309;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;\r\nCREATE TABLE IF NOT EXISTS `sales_sample_output.order` (\r\n  unified_order_id STRING OPTIONS(description='&#32113;&#21512;&#27880;&#25991;ID'),\r\n  create_date DATE OPTIONS(description='&#26085;&#20184;'),\r\n  create_datetime DATETIME OPTIONS(description='&#26085;&#26178;'),\r\n  customer_id STRING OPTIONS(description='&#39015;&#23458;ID'),\r\n  price INT64 OPTIONS(description='&#20385;&#26684;'),\r\n  price_before_discount INT64 OPTIONS(description='&#20516;&#24341;&#12365;&#21069;&#20385;&#26684;'),\r\n  total_discount INT64 OPTIONS(description='&#20516;&#24341;&#12365;&#38989;&#21512;&#35336;'),\r\n  total_line_discount INT64 OPTIONS(description='&#26126;&#32048;&#20516;&#24341;&#12365;&#38989;&#21512;&#35336;'),\r\n  order_discount INT64 OPTIONS(description='&#27880;&#25991;&#20516;&#24341;&#12365;&#38989;'),\r\n  sales_channel STRING OPTIONS(description='&#36009;&#22770;&#12481;&#12515;&#12493;&#12523;')\r\n)\r\nPARTITION BY create_date\r\nOPTIONS (\r\n  description = '&#27880;&#25991;&#19968;&#35239;'\r\n);\r\n\r\n-- (2\/3) &#26356;&#26032;&#26399;&#38291;&#20869;&#12398;&#24046;&#20998;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;\r\nCREATE OR REPLACE TABLE `sales_sample_intermediate.order_incremental` AS (\r\n  -- &#24215;&#38957;&#12487;&#12540;&#12479;&#12434;&#29983;&#25104;\r\n  SELECT\r\n    CONCAT('S_',receipt_id) AS unified_order_id,\r\n    create_date,\r\n    NULL AS create_datetime,\r\n    customer_id,\r\n    price,\r\n    price_before_discount,\r\n    total_discount,\r\n    total_line_discount,\r\n    order_discount,\r\n    '&#24215;&#38957;' AS sales_channel\r\n  FROM\r\n    ${ref('shop_order')}\r\n  WHERE\r\n    create_date ${dataform.projectConfig.vars.EQUALS_CALC_DATETIME}\r\n  \r\n  -- EC&#12487;&#12540;&#12479;&#12434;&#32080;&#21512;\r\n  UNION ALL\r\n  SELECT\r\n    CONCAT('E_',order_id) AS unified_order_id,\r\n    DATE(created_at) AS create_date,\r\n    created_at AS create_datetime,\r\n    customer_id,\r\n    price,\r\n    price_before_discount,\r\n    total_discount,\r\n    total_line_discount,\r\n    order_discount,\r\n    'EC' AS sales_channel\r\n  FROM\r\n    ${ref('ec_order')}\r\n  WHERE\r\n    created_at ${dataform.projectConfig.vars.EQUALS_CALC_DATETIME}\r\n\r\n  -- &#12510;&#12540;&#12472;&#12375;&#12383;&#24460;&#12395;&#12477;&#12540;&#12488;\r\n  ORDER BY create_date ASC, customer_id ASC \r\n);\r\n\r\n-- (3\/3) &#24046;&#20998;&#12486;&#12540;&#12502;&#12523;&#12434;&#32047;&#31309;&#12486;&#12540;&#12502;&#12523;&#12395;&#12510;&#12540;&#12472;\r\nMERGE `sales_sample_output.order` AS t\r\n  USING `sales_sample_intermediate.order_incremental` AS s\r\n  ON t.unified_order_id = s.unified_order_id\r\nWHEN NOT MATCHED BY SOURCE\r\n  AND t.create_date ${dataform.projectConfig.vars.EQUALS_CALC_DATETIME} THEN\r\n  DELETE\r\nWHEN MATCHED THEN\r\n  UPDATE SET\r\n    t.create_date           = s.create_date,\r\n    t.create_datetime       = s.create_datetime,\r\n    t.customer_id           = s.customer_id,\r\n    t.price                 = s.price,\r\n    t.price_before_discount = s.price_before_discount,\r\n    t.total_discount        = s.total_discount,\r\n    t.total_line_discount   = s.total_line_discount,\r\n    t.order_discount        = s.order_discount,\r\n    t.sales_channel         = s.sales_channel\r\nWHEN NOT MATCHED THEN\r\n  INSERT (\r\n    unified_order_id,\r\n    create_date,\r\n    create_datetime,\r\n    customer_id,\r\n    price,\r\n    price_before_discount,\r\n    total_discount,\r\n    total_line_discount,\r\n    order_discount,\r\n    sales_channel\r\n  )\r\n  VALUES (\r\n    s.unified_order_id,\r\n    s.create_date,\r\n    s.create_datetime,\r\n    s.customer_id,\r\n    s.price,\r\n    s.price_before_discount,\r\n    s.total_discount,\r\n    s.total_line_discount,\r\n    s.order_discount,\r\n    s.sales_channel\r\n);<\/pre><p>&#12383;&#12384;&#12375;&#12289;&#35211;&#12390;&#12398;&#36890;&#12426;&#12289;&#12363;&#12394;&#12426;&#38263;&#12367;&#12394;&#12387;&#12390;&#12375;&#12414;&#12356;&#12414;&#12377;&#12290;&#12394;&#12435;&#12392;111&#34892;&#12391;&#12377;&hellip;&#12290;<\/p><p>&#12381;&#12398;&#12383;&#12417;&#12289;operations&#12391;&#24459;&#20736;&#12395;&#26360;&#12367;&#12363;&#12289;incremental&#12395;&#12424;&#12427;&#23455;&#35013;&#12364;&#12391;&#12365;&#12427;&#12363;&#12393;&#12358;&#12363;&#12399;&#12289;&#36939;&#29992;&#12392;&#12375;&#12390;&#12393;&#12371;&#12414;&#12391;&#35377;&#23481;&#12391;&#12365;&#12427;&#12363;&#12398;&#35251;&#28857;&#12391;&#24910;&#37325;&#12395;&#26908;&#35342;&#12375;&#12390;&#12362;&#12356;&#12383;&#12411;&#12358;&#12364;&#12424;&#12373;&#12381;&#12358;&#12391;&#12377;&#12290;&#12418;&#12375;incremental&#12391;&#23455;&#35013;&#12391;&#12365;&#12427;&#22580;&#21512;&#12289;&#20170;&#22238;&#12398;&#20363;&#12391;&#35328;&#12360;&#12400;111&#34892;&#12384;&#12387;&#12383;&#12467;&#12540;&#12489;&#12364;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;69&#34892;&#12395;&#28608;&#28187;&#12377;&#12427;&#12398;&#12399;&#28961;&#35222;&#12391;&#12365;&#12394;&#12356;&#39749;&#21147;&#12391;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true \" title=\"definitions\/output\/order_incremental.sqlx\">config {\r\n  type: 'incremental',\r\n  schema: 'sales_sample_output',\r\n  name: 'order_incremental',\r\n  description: '&#27880;&#25991;&#19968;&#35239;&#65288;&#24215;&#38957;&#12392;EC&#12434;&#32113;&#21512;&#65289;',\r\n  columns: {\r\n    unified_order_id:' &#32113;&#21512;&#27880;&#25991;ID',\r\n    create_date: '&#26085;&#20184;',\r\n    create_datetime: '&#26085;&#26178;',\r\n    customer_id: '&#39015;&#23458;ID',\r\n    price: '&#20385;&#26684;',\r\n    price_before_discount: '&#20516;&#24341;&#12365;&#21069;&#20385;&#26684;',\r\n    total_discount: '&#20516;&#24341;&#12365;&#38989;&#21512;&#35336;',\r\n    total_line_discount: '&#26126;&#32048;&#20516;&#24341;&#12365;&#38989;&#21512;&#35336;',\r\n    order_discount: '&#27880;&#25991;&#20516;&#24341;&#12365;&#38989;',\r\n    sales_channel: '&#36009;&#22770;&#12481;&#12515;&#12493;&#12523;'\r\n  },\r\n  uniqueKey: [\"unified_order_id\"],\r\n  bigquery: {\r\n    partitionBy: \"create_date\",\r\n    updatePartitionFilter: \"create_date &gt;= DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY)\"\r\n  }\r\n}\r\n\r\npre_operations {\r\n  DECLARE create_date_checkpoint DEFAULT (\r\n    ${when(incremental(),\r\n    `SELECT DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY)`,\r\n    `SELECT DATE(2001,1,1)`)}\r\n  )\r\n}\r\n\r\n-- &#24215;&#38957;&#12487;&#12540;&#12479;&#12434;&#29983;&#25104;\r\nSELECT\r\n  CONCAT('S_',receipt_id) AS unified_order_id,\r\n  create_date,\r\n  NULL AS create_datetime,\r\n  customer_id,\r\n  price,\r\n  price_before_discount,\r\n  total_discount,\r\n  total_line_discount,\r\n  order_discount,\r\n  '&#24215;&#38957;' AS sales_channel\r\nFROM\r\n  ${ref('shop_order')}\r\nWHERE\r\n  create_date &gt;= create_date_checkpoint\r\n\r\n-- EC&#12487;&#12540;&#12479;&#12434;&#32080;&#21512;\r\nUNION ALL\r\nSELECT\r\n  CONCAT('E_',order_id) AS unified_order_id,\r\n  DATE(created_at) AS create_date,\r\n  created_at AS create_datetime,\r\n  customer_id,\r\n  price,\r\n  price_before_discount,\r\n  total_discount,\r\n  total_line_discount,\r\n  order_discount,\r\n  'EC' AS sales_channel\r\nFROM\r\n  ${ref('ec_order')}\r\nWHERE\r\n  DATE(created_at) &gt;= create_date_checkpoint\r\n\r\n-- &#12510;&#12540;&#12472;&#12375;&#12383;&#24460;&#12395;&#12477;&#12540;&#12488;\r\nORDER BY create_date ASC, customer_id ASC<\/pre><h4><span class=\"ez-toc-section\" id=\"%E2%91%A5%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%AE%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%97%EF%BC%88projectConfigvars%EF%BC%89\"><\/span>&#9317;&#12464;&#12525;&#12540;&#12496;&#12523;&#22793;&#25968;&#12398;&#20351;&#12356;&#22238;&#12375;&#65288;projectConfig.vars&#65289;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>&#35079;&#38609;&#12394;&#12527;&#12540;&#12463;&#12501;&#12525;&#12540;&#12434;&#32068;&#12416;&#38555;&#12399;&#12289;&#21516;&#12376;&#12467;&#12540;&#12489;&#12434;&#20351;&#12356;&#22238;&#12375;&#12383;&#12356;&#12371;&#12392;&#12364;&#20986;&#12390;&#12367;&#12427;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&#12414;&#12383;&#12289;&#29305;&#23450;&#12398;&#37096;&#20998;&#12384;&#12369;&#26360;&#12365;&#25563;&#12360;&#12390;&#23455;&#34892;&#12375;&#12383;&#12356;&#12392;&#12356;&#12358;&#22580;&#21512;&#12418;&#20986;&#12390;&#12367;&#12427;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&#12381;&#12358;&#12356;&#12387;&#12383;&#22580;&#21512;&#12395;&#26377;&#21177;&#12394;&#12398;&#12364;&#12289;projectConfig.vars&#12395;&#12424;&#12387;&#12390;&#23450;&#32681;&#12373;&#12428;&#12427;&#12467;&#12531;&#12497;&#12452;&#12523;&#22793;&#25968;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><p>&#21069;&#38917;&#12398;order&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#12427;SQL&#12395;&#12390;&#30331;&#22580;&#12375;&#12390;&#12356;&#12383;<\/p><pre class=\"lang:default decode:true\">WHERE create_date ${dataform.projectConfig.vars.EQUALS_CALC_DATETIME}<\/pre><p>&#12392;&#12356;&#12358;&#34920;&#29694;&#12364;1&#20363;&#12391;&#12377;&#12290;&#12467;&#12531;&#12497;&#12452;&#12523;&#22793;&#25968;&#12398;&#29305;&#24500;&#12392;&#12375;&#12390;&#12289;<\/p><ol>\n<li>&#12487;&#12501;&#12457;&#12523;&#12488;&#20516;&#12434; [workflow_settings.yaml] &#12501;&#12449;&#12452;&#12523;&#12395;&#12390;&#23450;&#32681;&#12391;&#12365;&#12427;&#12290;<\/li>\n<li>&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12408;&#12398;&#12467;&#12531;&#12497;&#12452;&#12523;&#26178;&#12395;&#12289;&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12372;&#12392;&#12395;&#20491;&#21029;&#12395;&#19978;&#26360;&#12365;&#12391;&#12365;&#12427;&#12290;<\/li>\n<\/ol><p>&#12392;&#12356;&#12358;2&#28857;&#12364;&#12354;&#12426;&#12289;&#12358;&#12414;&#12367;&#32068;&#12415;&#21512;&#12431;&#12379;&#12427;&#12371;&#12392;&#12391;&#34701;&#36890;&#12398;&#21033;&#12367;&#38283;&#30330;&#12392;&#23455;&#34892;&#12364;&#21487;&#33021;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><p>1&#12388;&#30446;&#12398;&#12487;&#12501;&#12457;&#12523;&#12488;&#20516;&#12395;&#12388;&#12356;&#12390;&#12399;&#12289;&#20363;&#12360;&#12400;&#20170;&#22238;&#12398;&#12503;&#12525;&#12472;&#12455;&#12463;&#12488;&#12391;&#12354;&#12428;&#12400;workflow_settings.yaml&#12395;&#12390;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#38598;&#35336;&#26399;&#38291;&#12434;BETWEEN&#21477;&#12391;&#23450;&#32681;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\" title=\"workflow_settings.yaml\">defaultProject: {bigquery_project_id}\r\ndefaultLocation: {bigquery_project_location}\r\ndefaultDataset: {bigquery_dataset_name}\r\ndefaultAssertionDataset: dataform_assertions\r\ndataformCoreVersion: 3.0.0\r\n\r\n# &#12503;&#12525;&#12472;&#12455;&#12463;&#12488;&#12398;&#20849;&#36890;&#12497;&#12521;&#12513;&#12540;&#12479;&#65288;&#12467;&#12531;&#12497;&#12452;&#12523;&#26178;&#12395;&#19978;&#26360;&#12365;&#12375;&#12358;&#12427;&#65289;\r\nvars:\r\n  # &#12477;&#12540;&#12473;&#12392;&#12394;&#12427;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12398;ID\r\n  SOURCE_SPREADSHEET_ID: '1nShXon7tEcSpm1jyVwl-ouYVAhpcln3Nzwuwhu1TiFI'\r\n\r\n  # &#21508;&#31278;&#38598;&#35336;&#12497;&#12521;&#12513;&#12540;&#12479; \r\n  EQUALS_CALC_DATETIME: BETWEEN '2001-01-01' AND '2025-12-31'\r\n  ONE_YEAR_AGO: DATE(2024,1,1)\r\n  YESTERDAY: DATE(2024,12,31)<\/pre><p>&#19978;&#35352;&#12399;&#12469;&#12531;&#12503;&#12523;&#12394;&#12398;&#12391;&#26085;&#20184;&#12434;&#12495;&#12540;&#12489;&#12467;&#12540;&#12487;&#12451;&#12531;&#12464;&#12375;&#12390;&#12356;&#12414;&#12377;&#12364;&#12289;&#23455;&#38555;&#12398;&#36939;&#29992;&#12391;&#12399;DATE_SUB&#38306;&#25968;&#12420;DATE_TRUNC&#38306;&#25968;&#12434;&#20351;&#12358;&#12392;&#12356;&#12429;&#12356;&#12429;&#12394;&#12497;&#12479;&#12540;&#12531;&#12364;&#23455;&#35013;&#12391;&#12365;&#12390;&#20415;&#21033;&#12391;&#12377;&#12397;&#12290;&#65288;&#8251;&#12487;&#12540;&#12479;&#12398;&#24615;&#36074;&#12395;&#12424;&#12387;&#12390;&#24494;&#22937;&#12395;&#22793;&#26356;&#12364;&#24517;&#35201;&#12394;&#22580;&#21512;&#12399;&#12354;&#12427;&#12398;&#12391;&#12372;&#30041;&#24847;&#12367;&#12384;&#12373;&#12356;&#12290;&#65289;<\/p><ul>\n<li><strong>&#30452;&#36817;7&#26085;&#38291;<\/strong> - BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)<\/li>\n<li><strong>&#20170;&#26376;<\/strong> - BETWEEN DATE_TRUNC(<span class=\"hljs-built_in\">CURRENT_DATE<\/span>(), <span class=\"hljs-keyword\">MONTH<\/span>) AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)<\/li>\n<li><strong>&#20808;&#26376;&#65374;&#20170;&#26376; <\/strong>- DATE_TRUNC(DATE_SUB(<span class=\"hljs-built_in\">CURRENT_DATE<\/span>(), <span class=\"hljs-type\">INTERVAL<\/span> <span class=\"hljs-number\">1<\/span> <span class=\"hljs-keyword\">MONTH<\/span>), <span class=\"hljs-keyword\">MONTH<\/span>)&nbsp;AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)<\/li>\n<\/ul><p>&#12381;&#12375;&#12390;2&#12388;&#30446;&#12398;&#12467;&#12531;&#12497;&#12452;&#12523;&#26178;&#12398;&#19978;&#26360;&#12365;&#12395;&#12388;&#12356;&#12390;&#12391;&#12377;&#12290; &#12467;&#12531;&#12497;&#12452;&#12523;&#12377;&#12427;&#12392;&#12365;&#12395;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395; [&#12467;&#12531;&#12497;&#12452;&#12523;&#22793;&#25968;] &#12434;&#20837;&#21147;&#12377;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12427;&#12424;&#12358;&#12395;&#12394;&#12387;&#12390;&#12356;&#12414;&#12377;&#12290;<\/p><p><a href=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-compile-variable.jpg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-17691\" src=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-compile-variable-675x800.jpg\" alt=\"\" width=\"675\" height=\"800\"><\/a><\/p><p>&#12394;&#12398;&#12391;&#12289;<\/p><ul>\n<li>&#12461;&#12540;1&#65306;EQUALS_CALC_DATETIME<\/li>\n<li>&#20516;1&#65306;BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)<\/li>\n<\/ul><p>&#12398;&#12424;&#12358;&#12395;&#20837;&#21147;&#12375;&#12390;&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12395;&#12300;&#30452;&#36817;1&#36913;&#38291;&#12398;&#38598;&#35336;&#12301;&#12398;&#12424;&#12358;&#12395;&#21517;&#21069;&#12434;&#20184;&#12369;&#12390;&#20445;&#23384;&#12434;&#12377;&#12427;&#12371;&#12392;&#12391;&#12289;&#20840;&#38598;&#35336;&#12391;&#12399;&#12394;&#12367;&#30452;&#36817;1&#36913;&#38291;&#12384;&#12369;&#12398;&#12487;&#12540;&#12479;&#12434;&#26356;&#26032;&#12377;&#12427;&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12395;&#12377;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;<\/p><p>&#12371;&#12398;&#32068;&#12415;&#21512;&#12431;&#12379;&#12395;&#12424;&#12387;&#12390;&#12289;<\/p><ul>\n<li>&#12456;&#12487;&#12451;&#12479;&#19978;&#12398;&#12486;&#12473;&#12488;&#23455;&#34892; - &#23436;&#20840;&#12394;&#26356;&#26032;<\/li>\n<li>&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12300;&#30452;&#36817;1&#36913;&#38291;&#12301;- &#30452;&#36817;1&#36913;&#38291;&#20998;&#12398;&#24046;&#20998;&#26356;&#26032;<\/li>\n<li>&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12300;&#20170;&#26376;&#12301;- &#20170;&#26376;&#20998;&#12398;&#24046;&#20998;&#26356;&#26032;<\/li>\n<li>&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12300;&#20808;&#26376;&#65374;&#20170;&#26376;&#12301;- &#20808;&#26376;&#65374;&#20170;&#26376;&#20998;&#12398;&#24046;&#20998;&#26356;&#26032;<\/li>\n<li>&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12300;&#20840;&#20307;&#12301;- &#23436;&#20840;&#12394;&#26356;&#26032;<\/li>\n<\/ul><p>&#12398;&#12424;&#12358;&#12395;&#20219;&#24847;&#12398;&#26399;&#38291;&#12391;&#12398;&#20877;&#38598;&#35336;&#12364;&#21487;&#33021;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#23455;&#21209;&#19978;&#12399;&#38598;&#35336;&#26465;&#20214;&#12434;&#24494;&#22937;&#12395;&#22793;&#12360;&#12390;&#23455;&#34892;&#12375;&#12383;&#12356;&#12465;&#12540;&#12473;&#12364;&#22810;&#12356;&#12391;&#12377;&#12364;&#12289;&#12381;&#12398;&#12392;&#12365;&#12395;&#21407;&#26412;&#12398;&#12467;&#12540;&#12489;&#12434;&#37117;&#24230;&#22793;&#26356;&#12377;&#12427;&#12398;&#12399;&#12522;&#12473;&#12463;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#36939;&#29992;&#12395;&#12390;&#22793;&#12360;&#12358;&#12427;&#37096;&#20998;&#12399;&#12467;&#12531;&#12497;&#12452;&#12523;&#22793;&#25968;&#12395;&#12375;&#12390;&#12522;&#12522;&#12540;&#12473;&#27083;&#25104;&#12391;&#19978;&#26360;&#12365;&#12391;&#12365;&#12427;&#35373;&#35336;&#12395;&#12375;&#12390;&#12362;&#12367;&#12392;&#12424;&#12356;&#12391;&#12375;&#12423;&#12358;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A6JavaScript%E3%81%AB%E3%82%88%E3%82%8B%E8%A4%87%E9%9B%91%E3%81%AA%E9%9B%86%E8%A8%88%EF%BC%88CREATE_TEMP_FUNCTION%EF%BC%89\"><\/span>&#9318;JavaScript&#12395;&#12424;&#12427;&#35079;&#38609;&#12394;&#38598;&#35336;&#65288;CREATE TEMP FUNCTION&#65289;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>Dataform&#12398;&#29305;&#38263;&#12392;&#12375;&#12390;&#12289;CREATE TEMP FUNCTION&#12513;&#12477;&#12483;&#12489;&#12395;&#12424;&#12387;&#12390;JavaScript&#12434;&#20351;&#12387;&#12390;&#12487;&#12540;&#12479;&#20966;&#29702;&#12434;&#23455;&#35013;&#12375;&#12390;&#35079;&#38609;&#12394;&#38598;&#35336;&#12434;&#23455;&#29694;&#12391;&#12365;&#12427;&#28857;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;<\/p><p>CREATE TEMP FUNCTION&#33258;&#20307;&#12364;SQL&#12398;&#12383;&#12417;&#12289;config.type:'operations'&#12395;&#12424;&#12427;&#23455;&#35013;&#12395;&#12399;&#12394;&#12426;&#12414;&#12377;&#12364;&#12289;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12434;&#12418;&#12392;&#12395;&#38598;&#32004;&#12377;&#12427;&#22580;&#21512;&#12420;&#12289;FOR&#12523;&#12540;&#12503;&#12434;&#20351;&#12356;&#12383;&#12356;&#22580;&#21512;&#12289;&#22810;&#27573;&#38542;&#12398;&#22793;&#25968;&#20966;&#29702;&#12364;&#20837;&#12427;&#22580;&#21512;&#12394;&#12393;&#12399;JavaScript&#12395;&#12424;&#12427;&#23455;&#35013;&#12398;&#26041;&#12364;&#26377;&#21033;&#12391;&#12377;&#12290;<\/p><p>&#20170;&#22238;&#12398;&#12487;&#12540;&#12479;&#12497;&#12452;&#12503;&#12521;&#12452;&#12531;&#12391;&#12399;custmer&#12486;&#12540;&#12502;&#12523;&#12395;&#12390;&#21508;&#31278;&#39015;&#23458;&#12475;&#12464;&#12513;&#12531;&#12488;&#12434;&#20316;&#12427;&#38555;&#12395;&#21033;&#29992;&#12375;&#12390;&#12362;&#12426;&#12289;&#23455;&#38555;&#12398;&#12467;&#12540;&#12489;&#12364;&#20197;&#19979;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><p>&#20840;&#20307;&#24863;&#12392;&#12375;&#12390;&#12399;&#12289;CREATE TEMP FUNCTION&#12391;&#35079;&#25968;&#12398;&#38306;&#25968;&#12434;&#23450;&#32681;&#12375;&#12383;&#12358;&#12360;&#12391;&#12289;&#26368;&#24460;&#12395;CREATE OR REPLACE TABLE&#12513;&#12477;&#12483;&#12489;1&#26412;&#12391;&#38598;&#35336;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&#65288;&#8251;&#25276;&#12373;&#12360;&#12390;&#12362;&#12365;&#12383;&#12356;&#12467;&#12484;&#12364;&#22810;&#12356;&#12398;&#12391;&#12289;&#12381;&#12428;&#12399;&#12467;&#12540;&#12489;&#12398;&#24460;&#12391;&#35500;&#26126;&#12375;&#12414;&#12377;&#12290;&#65289;<\/p><pre class=\"lang:default decode:true\" title=\"definitions\/output\/customer.sqlx\">config {\r\n  type: 'operations',\r\n  schema: 'sales_sample_output',\r\n  name: 'customer',\r\n  description: '&#39015;&#23458;&#19968;&#35239;',\r\n  hasOutput: true,\r\n  tags: ['02_creating_from_inner_tables']\r\n}\r\n\r\n-- JavaScript functions&#12434;&#20351;&#12358;&#12383;&#12417;&#12289;&#12420;&#12416;&#12394;&#12367;operations&#12391;&#20316;&#25104;\r\n\r\n-- RFM&#12398;Recency&#35336;&#31639;\r\nCREATE TEMP FUNCTION get_age(\r\n  date_of_birth DATE,\r\n  yesterday DATE\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  const milli_seconds = 24 * 60 * 60 * 1000;\r\n  const year_diff = Math.floor((yesterday - date_of_birth) \/ milli_seconds \/ 365);\r\n  return Math.floor(year_diff \/ 10) + '0&#20195;';\r\n\"\"\";\r\n\r\n-- RFM&#12398;Recency&#35336;&#31639;\r\nCREATE TEMP FUNCTION get_purchase_recency_segment(\r\n  last_purchase_date DATE,\r\n  yesterday DATE\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  const milli_seconds = 24 * 60 * 60 * 1000;\r\n  const date_diff = Math.floor((yesterday - last_purchase_date) \/ milli_seconds);\r\n  if (date_diff &lt;= 30){\r\n    return 'R1_30&#26085;&#20197;&#20869;';\r\n  } else if (date_diff &lt;= 90){\r\n    return 'R2_90&#26085;&#20197;&#20869;';\r\n  } else if (date_diff &lt;= 180){\r\n    return 'R3_180&#26085;&#20197;&#20869;';\r\n  } else if (date_diff &lt;= 365){\r\n    return 'R4_1&#24180;&#20197;&#20869;';\r\n  }\r\n  return 'R5_1&#24180;&#12424;&#12426;&#12418;&#21069;'\r\n\"\"\";\r\n\r\n-- RFM&#12398;Freqency&#35336;&#31639;\r\nCREATE TEMP FUNCTION get_purchase_frequency_segment(\r\n  one_year_purchase_count INT64\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  if (one_year_purchase_count &gt;= 12){\r\n    return 'F1_&#27598;&#26376;';\r\n  } else if (one_year_purchase_count &gt;= 4){\r\n    return 'F2_2&#65374;3&#12363;&#26376;&#12395;1&#22238;';\r\n  } else if (one_year_purchase_count &gt;= 2){\r\n    return 'F3_&#21322;&#24180;&#12395;1&#22238;';\r\n  } else if (one_year_purchase_count &gt;= 1){\r\n    return 'F4_&#24180;&#12395;1&#22238;';\r\n  } \r\n  return 'F5_&#24180;1&#22238;&#26410;&#28288;'\r\n\"\"\";\r\n\r\n-- RFM&#12398;Monetary&#35336;&#31639;\r\nCREATE TEMP FUNCTION get_purchase_monetary_segment(\r\n  total_purchase_amount INT64\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  if (total_purchase_amount &gt;= 1000000){\r\n    return 'M1_100&#19975;&#20870;&#20197;&#19978;';\r\n  } else if (total_purchase_amount &gt;= 100000){\r\n    return 'M2_10&#19975;&#20870;&#20197;&#19978;';\r\n  } else if (total_purchase_amount &gt;= 10000){\r\n    return 'M3_1&#19975;&#20870;&#20197;&#19978;';\r\n  } else if (total_purchase_amount &gt;= 1000){\r\n    return 'M4_&#21315;&#20870;&#20197;&#19978;';\r\n  } \r\n  return 'M5_&#21315;&#20870;&#26410;&#28288;';\r\n\"\"\";\r\n\r\n-- &#36092;&#20837;&#21830;&#21697;&#12475;&#12464;&#12513;&#12531;&#12488;\r\nCREATE TEMP FUNCTION get_purchase_product_segment(\r\n  product_summary ARRAY&lt;STRUCT&lt;create_date DATE, product_category STRING&gt;&gt;\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  \/* &#30452;&#36817;5&#20491;&#12398;&#36092;&#20837;&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;&#12540;&#12391;&#26368;&#12418;&#22810;&#12356;2&#12459;&#12486;&#12468;&#12522;&#12540;&#12434;&#25277;&#20986; *\/\r\n  \/* &#12394;&#12362;&#21516;&#29575;&#12398;&#22580;&#21512;&#12399;&#12289;&#12424;&#12426;&#30452;&#36817;&#12398;&#12459;&#12486;&#12468;&#12522;&#12540;&#12434;&#20778;&#20808; *\/\r\n\r\n  \/* &#12414;&#12378;&#12399;&#12459;&#12454;&#12531;&#12488; *\/\r\n  product_summary = product_summary.slice(0,5);\r\n  const result = Object.values(\r\n    product_summary.reduce((acc, {create_date, product_category}) =&gt; {\r\n      if (!acc[product_category]) {\r\n        acc[product_category] = {category: product_category, date: create_date, count: 0};\r\n      }\r\n      acc[product_category].count += 1;\r\n      return acc;\r\n    }, {})\r\n  );\r\n\r\n  \/* &#19978;&#20301;2&#12459;&#12486;&#12468;&#12522;&#12540;&#12434;&#25277;&#20986;&#12375;&#12289;&#12459;&#12486;&#12468;&#12522;&#12540;&#32068;&#12415;&#21512;&#12431;&#12379;&#12364;&#12518;&#12491;&#12540;&#12463;&#12395;&#12394;&#12427;&#12424;&#12358;&#26119;&#38918;&#12477;&#12540;&#12488;&#12375;&#12383;&#12358;&#12360;&#12391;&#25991;&#23383;&#21015;&#32080;&#21512;&#12375;&#12390;&#36820;&#12377; *\/\r\n  return result\r\n    .sort((a, b) =&gt; b.count - a.count || new Date(b.date) - new Date(a.date))\r\n    .slice(0, 2)\r\n    .sort((a, b) =&gt; {\r\n      if (a.category &gt; b.category) return 1;\r\n      if (a.category &lt; b.category) return -1;\r\n      return 0;\r\n    })\r\n    .map(a =&gt; a.category)\r\n    .join('+');\r\n\"\"\";\r\n\r\n-- &#36092;&#20837;&#32076;&#36335;&#12475;&#12464;&#12513;&#12531;&#12488;\r\nCREATE TEMP FUNCTION get_purchase_channel_segment(\r\n  channel_summary ARRAY&lt;STRUCT&lt;create_date DATE, sales_channel STRING&gt;&gt;\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  \/* &#21336;&#32020;&#38598;&#35336;&#12375;&#12390;EC&#12392;&#24215;&#38957;&#12398;&#27604;&#29575;&#12398;&#12415;&#12391;&#12475;&#12464;&#12513;&#12531;&#12488;&#20998;&#12369;&#12377;&#12427; *\/\r\n\r\n  \/* &#12414;&#12378;&#12399;&#12459;&#12454;&#12531;&#12488;&#12375;&#12390;&#12289;&#27604;&#29575;&#12434;&#20986;&#12375;&#12390;&#12362;&#12367; *\/\r\n  const counts = channel_summary.reduce((acc, record) =&gt; {\r\n    const key = record.sales_channel;\r\n    if (acc[key]) {\r\n        acc[key] += 1;\r\n    } else {\r\n        acc[key] = 1;\r\n    }\r\n    return acc;\r\n  }, {});\r\n  const total_count = Object.values(counts).reduce((sum, count) =&gt; sum + count, 0);\r\n  const shop_ratio = counts['&#24215;&#38957;'] \/ total_count;\r\n  const ec_ratio = counts['EC'] \/ total_count;\r\n\r\n  \/* &#27604;&#29575;&#12395;&#24540;&#12376;&#12390;&#12475;&#12464;&#12513;&#12531;&#12488;&#12434;&#35373;&#23450; *\/\r\n  if (shop_ratio == 1){\r\n    return '01_&#24215;&#38957;&#12398;&#12415;';\r\n  } else if (shop_ratio &gt;= 0.7){\r\n    return '02_&#24215;&#38957;&#20013;&#24515;';\r\n  } else if (ec_ratio == 1){\r\n    return '05_EC&#12398;&#12415;';\r\n  } else if (ec_ratio &gt;= 0.7){\r\n    return '04_EC&#20013;&#24515;';\r\n  }\r\n  return '03_&#24215;&#38957;&#12539;EC&#28151;&#22312;';\r\n\"\"\";\r\n\r\n-- &#20516;&#24341;&#12365;&#21453;&#24540;&#29575;&#12475;&#12464;&#12513;&#12531;&#12488;\r\nCREATE TEMP FUNCTION get_discount_response_segment(\r\n  one_year_discount_rate FLOAT64\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  if (one_year_discount_rate &gt; 0.1){\r\n    return 'D5_10%&#20197;&#19978;';\r\n  } else if (one_year_discount_rate &gt; 0.05){\r\n    return 'D4_5%&#20197;&#19978;';\r\n  } else if (one_year_discount_rate &gt; 0.03){\r\n    return 'D3_3%&#20197;&#19978;';\r\n  } else if (one_year_discount_rate &gt; 0){\r\n    return 'D2_3%&#26410;&#28288;';\r\n  }\r\n  return 'D1_&#20516;&#24341;&#12365;&#12394;&#12375;';\r\n\"\"\";\r\n\r\n-- RFM&#35336;&#31639;\r\nCREATE TEMP FUNCTION get_marketing_segment(\r\n  frequency STRING,\r\n  monetary STRING,\r\n  one_year_discount_rate FLOAT64\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  const f = frequency.slice(0,2);\r\n  const m = monetary.slice(0,2);\r\n\r\n  if (m == 'M1'){\r\n    return '01_&#12503;&#12524;&#12511;&#12450;&#12512;'; \/\/ &#32047;&#35336;100&#19975;&#20870;&#20197;&#19978;\r\n\r\n  } else if (f == 'F1'){\r\n    return '02_&#12525;&#12452;&#12516;&#12523;'; \/\/ &#27598;&#26376;&#36092;&#20837;&#12354;&#12426;(&#8786;&#32047;&#35336;10&#19975;&#20870;&#20197;&#19978;)\r\n\r\n  } else if (f == 'F2' || f == 'F3'){\r\n    if (one_year_discount_rate &gt;= 0.1){\r\n      return '05_&#12487;&#12451;&#12540;&#12523;&#12495;&#12531;&#12479;&#12540;';\r\n\r\n    } else if (m == 'M2'){\r\n      return '03_&#12521;&#12452;&#12488;&#12525;&#12452;&#12516;&#12523;'; \/\/ &#25968;&#12363;&#26376;&#12395;1&#22238;&#36092;&#20837;&times;&#32047;&#35336;10&#19975;&#20870;&#20197;&#19978;\r\n\r\n    } else {\r\n      return '04_&#12459;&#12472;&#12517;&#12450;&#12523;'; \/\/ &#25968;&#12363;&#26376;&#12395;1&#22238;&#36092;&#20837;&times;&#32047;&#35336;10&#19975;&#20870;&#26410;&#28288;\r\n    }\r\n  }\r\n  return '06_&#12494;&#12531;&#12450;&#12463;&#12486;&#12451;&#12502;'; \/\/ &#24180;&#12395;1&#22238;&#36092;&#20837;&#20197;&#19979;\r\n\"\"\";\r\n\r\nCREATE OR REPLACE TABLE `sales_sample_output.customer` (\r\n  \r\n  -- ID\r\n  customer_id STRING OPTIONS(description='&#39015;&#23458;ID'),\r\n\r\n  -- &#22522;&#26412;&#23646;&#24615;\r\n  gender STRING OPTIONS(description='&#24615;&#21029;'),\r\n  age STRING OPTIONS(description='&#24180;&#20195;'),\r\n  prefecture STRING OPTIONS(description='&#37117;&#36947;&#24220;&#30476;'),\r\n  region STRING OPTIONS(description='&#22320;&#22495;'),\r\n\r\n  -- &#38598;&#35336;&#20516;\r\n  first_purchase_date DATE OPTIONS(description='&#21021;&#22238;&#36092;&#20837;&#26085;'),\r\n  last_purchase_date DATE OPTIONS(description='&#26368;&#32066;&#36092;&#20837;&#26085;'),\r\n  total_purchase_amount INT64 OPTIONS(description='&#32047;&#35336;&#36092;&#20837;&#37329;&#38989;'),\r\n  total_purchase_count INT64 OPTIONS(description='&#32047;&#35336;&#36092;&#20837;&#22238;&#25968;'),\r\n  total_purchase_discount INT64 OPTIONS(description='&#32047;&#35336;&#20516;&#24341;&#12365;&#38989;'),\r\n  total_discount_rate FLOAT64 OPTIONS(description='&#32047;&#35336;&#24179;&#22343;&#20516;&#24341;&#12365;&#29575;'),\r\n  one_year_purchase_amount INT64 OPTIONS(description='&#24180;&#12354;&#12383;&#12426;&#36092;&#20837;&#37329;&#38989;'),\r\n  one_year_purchase_count INT64 OPTIONS(description='&#24180;&#12354;&#12383;&#12426;&#36092;&#20837;&#22238;&#25968;'),\r\n  one_year_purchase_discount INT64 OPTIONS(description='&#24180;&#12354;&#12383;&#12426;&#20516;&#24341;&#12365;&#38989;'),\r\n  one_year_discount_rate FLOAT64 OPTIONS(description='&#24180;&#12354;&#12383;&#12426;&#24179;&#22343;&#20516;&#24341;&#12365;&#29575;'),\r\n\r\n  -- &#21980;&#22909;&#24615;&#12475;&#12464;&#12513;&#12531;&#12488;\r\n  purchase_product_segment STRING OPTIONS(description='&#36092;&#20837;&#21830;&#21697;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n  purchase_channel_segment STRING OPTIONS(description='&#36092;&#20837;&#32076;&#36335;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n  discount_response_segment STRING OPTIONS(description='&#20516;&#24341;&#12365;&#24863;&#24540;&#24230;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n\r\n  -- &#36092;&#36023;&#12475;&#12464;&#12513;&#12531;&#12488;&#65288;RFM&#65289;\r\n  purchase_recency_segment STRING OPTIONS(description='R.&#26368;&#32066;&#36092;&#20837;&#26085;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n  purchase_frequency_segment STRING OPTIONS(description='F.&#36092;&#20837;&#38971;&#24230;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n  purchase_monetary_segment STRING OPTIONS(description='M.&#36092;&#20837;&#37329;&#38989;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n\r\n  -- &#32207;&#21512;&#12475;&#12464;&#12513;&#12531;&#12488;\r\n  marketing_segment STRING OPTIONS(description='&#12510;&#12540;&#12465;&#12486;&#12451;&#12531;&#12464;&#12475;&#12464;&#12513;&#12531;&#12488;'),\r\n\r\n)\r\nOPTIONS (\r\n  description='&#39015;&#23458;&#19968;&#35239;'\r\n)\r\nAS (\r\n  WITH temp AS (\r\n    SELECT\r\n      -- ID\r\n      t.customer_id,\r\n\r\n      -- &#22522;&#26412;&#23646;&#24615;\r\n      c.gender,\r\n      get_age(c.date_of_birth, ${dataform.projectConfig.vars.YESTERDAY}) AS age,\r\n      c.prefecture,\r\n      c.region,\r\n\r\n      -- &#38598;&#35336;&#20516;\r\n      t.first_purchase_date,\r\n      t.last_purchase_date,\r\n      t.total_purchase_amount,\r\n      t.total_purchase_count,\r\n      t.total_purchase_discount,\r\n      t.total_discount_rate,\r\n      s.total_purchase_amount AS one_year_purchase_amount,\r\n      s.total_purchase_count AS one_year_purchase_count,\r\n      s.total_purchase_discount AS one_year_purchase_discount,\r\n      s.total_discount_rate AS one_year_discount_rate,\r\n\r\n      -- &#21980;&#22909;&#24615;&#12475;&#12464;&#12513;&#12531;&#12488;\r\n      get_purchase_product_segment(d.product_summary) AS purchase_product_segment,\r\n      get_purchase_channel_segment(d.channel_summary) AS purchase_channel_segment,\r\n      get_discount_response_segment(s.total_discount_rate) AS discount_response_segment,\r\n\r\n      -- &#36092;&#36023;&#12475;&#12464;&#12513;&#12531;&#12488;&#65288;RFM&#65289;\r\n      get_purchase_recency_segment(t.last_purchase_date, ${dataform.projectConfig.vars.YESTERDAY}) AS purchase_recency_segment,\r\n      get_purchase_frequency_segment(s.total_purchase_count) AS purchase_frequency_segment,\r\n      get_purchase_monetary_segment(t.total_purchase_amount) AS purchase_monetary_segment\r\n\r\n    FROM\r\n      ${ref('customer_order_total')} t\r\n    LEFT JOIN ${ref('customer_order_one_year_subset')} s\r\n      ON t.customer_id = s.customer_id\r\n    LEFT JOIN ${ref('customer_order_line_detail')} d\r\n      ON t.customer_id = d.customer_id\r\n    LEFT JOIN ${ref('ec_customer')} c\r\n      ON t.customer_id = c.customer_id\r\n  )\r\n  SELECT\r\n    *,\r\n    get_marketing_segment(\r\n      purchase_frequency_segment,\r\n      purchase_monetary_segment,\r\n      one_year_discount_rate\r\n    ) AS marketing_segment\r\n  FROM\r\n    temp\r\n  ORDER BY\r\n    customer_id ASC\r\n);<\/pre><p>&nbsp;<\/p><p>&#12414;&#12378;&#12289;JavaScript&#38306;&#25968;&#12398;&#23450;&#32681;&#12398;&#20181;&#26041;&#12434;&#30906;&#35469;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;&#12418;&#12387;&#12392;&#12418;&#12471;&#12531;&#12503;&#12523;&#12394;get_age&#38306;&#25968;&#12434;&#35211;&#12427;&#12392;&#12289;&#24341;&#25968;&#12391;&#12354;&#12427;date_of_birth&#12392;yesterday&#12434;&#22411;&#12392;&#12475;&#12483;&#12488;&#12391;&#23450;&#32681;&#12398;&#12358;&#12360;&#12289;&#25147;&#12426;&#20516;&#12434;STRING&#12395;&#12375;&#12390;js&#65288;JavaScript&#65289;&#12391;&#26360;&#12356;&#12390;&#12356;&#12414;&#12377;&#12290;&#29420;&#29305;&#12394;&#24863;&#12376;&#12399;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;&#24931;&#12428;&#12428;&#12400;&#12354;&#12392;&#12399;JavaScript&#12434;&#26360;&#12367;&#12384;&#12369;&#12394;&#12398;&#12391;&#20998;&#12363;&#12426;&#12420;&#12377;&#12356;&#12391;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\">CREATE TEMP FUNCTION get_age(\r\n  date_of_birth DATE,\r\n  yesterday DATE\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  const milli_seconds = 24 * 60 * 60 * 1000;\r\n  const year_diff = Math.floor((yesterday - date_of_birth) \/ milli_seconds \/ 365);\r\n  return Math.floor(year_diff \/ 10) + '0&#20195;';\r\n\"\"\";<\/pre><p>&#23455;&#38555;&#12395;&#38306;&#25968;&#12434;&#20351;&#12358;&#22580;&#21512;&#12418;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#12424;&#12367;&#12354;&#12427;&#38306;&#25968;&#30340;&#12394;&#26360;&#12365;&#26041;&#12391;&#36890;&#12426;&#12414;&#12377;&#12290;(&#12467;&#12531;&#12497;&#12452;&#12523;&#22793;&#25968;&#12395;&#12388;&#12356;&#12390;&#12399;&#21069;&#38917;&#12434;&#30906;&#35469;&#12367;&#12384;&#12373;&#12356;&#12290;)<\/p><pre class=\"lang:default decode:true\">SELECT\r\n  &hellip;\r\n  get_age(c.date_of_birth, ${dataform.projectConfig.vars.YESTERDAY}) AS age,\r\n  &hellip;\r\nFROM\r\n&#12288;&hellip;<\/pre><p>&nbsp;<\/p><p>&#12385;&#12394;&#12415;&#12395;&#12289;&#24341;&#25968;&#12395;&#37197;&#21015;&#12434;&#35373;&#23450;&#12377;&#12427;&#12371;&#12392;&#12418;&#12418;&#12385;&#12429;&#12435;&#21487;&#33021;&#12391;&#12377;&#12290;&#12383;&#12384;&#12375;&#12289;&#37197;&#21015;&#12434;&#23450;&#32681;&#12377;&#12427;&#26360;&#12365;&#26041;&#12395;&#30294;&#12364;&#12354;&#12427;&#12398;&#12391;&#12289;&#19969;&#23527;&#12417;&#12395;&#30906;&#35469;&#12375;&#12390;&#12356;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;&#12414;&#12378;&#38306;&#25968;&#12398;&#23450;&#32681;&#12391;&#12399;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;<\/p><p>ARRAY&lt;STRUCT&lt;{&#12459;&#12521;&#12512;&#12434;&#12459;&#12531;&#12510;&#21306;&#20999;&#12426;&#12391;&#12487;&#12540;&#12479;&#22411;&#12392;&#12392;&#12418;&#12395;&#20006;&#12409;&#12427;}&gt;&gt;<\/p><p>&#12398;&#12424;&#12358;&#12395;&#35352;&#36848;&#12377;&#12427;&#12371;&#12392;&#12391;&#12289;&#12356;&#12431;&#12422;&#12427;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12398;&#37197;&#21015;&#12434;&#24341;&#25968;&#12395;&#12377;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;&#20197;&#19979;&#12398;&#20363;&#12391;&#12399;&#12289;product_summary&#12434;&#37197;&#21015;&#12392;&#12375;&#12390;&#24341;&#25968;&#12395;&#35373;&#23450;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;JavaScript&#12398;&#20013;&#12399;&#36890;&#24120;&#12398;JavaScript&#12398;&#26360;&#12365;&#26041;&#12391;&#22823;&#19976;&#22827;&#12394;&#12398;&#12391;&#23433;&#24515;&#12391;&#12377;&#12397;&#12290;<\/p><pre class=\"lang:default decode:true\">CREATE TEMP FUNCTION get_purchase_product_segment(\r\n  product_summary ARRAY&lt;STRUCT&lt;create_date DATE, product_category STRING&gt;&gt;\r\n)\r\nRETURNS STRING\r\nLANGUAGE js\r\nAS r\"\"\"\r\n  \/* &#30452;&#36817;5&#20491;&#12398;&#36092;&#20837;&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;&#12540;&#12391;&#26368;&#12418;&#22810;&#12356;2&#12459;&#12486;&#12468;&#12522;&#12540;&#12434;&#25277;&#20986; *\/\r\n  \/* &#12394;&#12362;&#21516;&#29575;&#12398;&#22580;&#21512;&#12399;&#12289;&#12424;&#12426;&#30452;&#36817;&#12398;&#12459;&#12486;&#12468;&#12522;&#12540;&#12434;&#20778;&#20808; *\/\r\n\r\n  \/* &#12414;&#12378;&#12399;&#12459;&#12454;&#12531;&#12488; *\/\r\n  product_summary = product_summary.slice(0,5);\r\n  const result = Object.values(\r\n    product_summary.reduce((acc, {create_date, product_category}) =&gt; {\r\n      if (!acc[product_category]) {\r\n        acc[product_category] = {category: product_category, date: create_date, count: 0};\r\n      }\r\n      acc[product_category].count += 1;\r\n      return acc;\r\n    }, {})\r\n  );\r\n\r\n  \/* &#19978;&#20301;2&#12459;&#12486;&#12468;&#12522;&#12540;&#12434;&#25277;&#20986;&#12375;&#12289;&#12459;&#12486;&#12468;&#12522;&#12540;&#32068;&#12415;&#21512;&#12431;&#12379;&#12364;&#12518;&#12491;&#12540;&#12463;&#12395;&#12394;&#12427;&#12424;&#12358;&#26119;&#38918;&#12477;&#12540;&#12488;&#12375;&#12383;&#12358;&#12360;&#12391;&#25991;&#23383;&#21015;&#32080;&#21512;&#12375;&#12390;&#36820;&#12377; *\/\r\n  return result\r\n    .sort((a, b) =&gt; b.count - a.count || new Date(b.date) - new Date(a.date))\r\n    .slice(0, 2)\r\n    .sort((a, b) =&gt; {\r\n      if (a.category &gt; b.category) return 1;\r\n      if (a.category &lt; b.category) return -1;\r\n      return 0;\r\n    })\r\n    .map(a =&gt; a.category)\r\n    .join('+');\r\n\"\"\";<\/pre><p>&#37197;&#21015;&#12434;&#24341;&#25968;&#12395;&#12377;&#12427;&#22580;&#21512;&#12399;&#12289;&#23455;&#38555;&#12395;&#38306;&#25968;&#12434;&#20351;&#12358;&#22580;&#21512;&#12398;&#24341;&#25968;&#12398;&#20316;&#12426;&#26041;&#12418;&#29305;&#27530;&#12391;&#12377;&#12290;<\/p><p>&#20170;&#12363;&#12425;&#30906;&#35469;&#12377;&#12427;&#20363;&#12391;&#12399;&#12289;customer&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#12427;&#21069;&#12395;customer_order_line_detail&#12392;&#12356;&#12358;&#12486;&#12540;&#12502;&#12523;&#12392;&#12375;&#12390;&#20107;&#21069;&#12395;&#20316;&#12387;&#12390;&#12356;&#12427;&#12398;&#12391;&#12377;&#12364;&#12289;&#12381;&#12398;&#20013;&#12391;ARRAY_AGG&#38306;&#25968;&#12392;STRUCT&#38306;&#25968;&#12395;&#12424;&#12387;&#12390;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12487;&#12540;&#12479;&#12434;&#37197;&#21015;&#12392;&#12375;&#12390;1&#12388;&#12398;&#12459;&#12521;&#12512;product_summary&#12395;&#38598;&#32004;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&#38598;&#32004;&#12394;&#12398;&#12391;&#12289;GROUP BY&#12434;&#24536;&#12428;&#12378;&#12395;&#26360;&#12365;&#12414;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\" title=\"definitions\/output\/customer_order_line_detail.sqlx\">config {\r\n  type: 'table',\r\n  schema: 'sales_sample_output',\r\n  name: 'customer_order_line_detail',\r\n  description: '&#39015;&#23458;&#27880;&#25991;&#26126;&#32048;&#65288;&#35443;&#32048;&#65289;',\r\n  tags: ['02_creating_from_inner_tables']\r\n}\r\n\r\nSELECT\r\n  customer_id,\r\n  ARRAY_AGG(STRUCT(create_date,product_category) ORDER BY create_date DESC) AS product_summary,\r\n  ARRAY_AGG(STRUCT(create_date,sales_channel) ORDER BY create_date DESC) AS channel_summary\r\nFROM\r\n  ${ref('order_line')}\r\nWHERE\r\n  customer_id IS NOT NULL\r\nGROUP BY\r\n  customer_id<\/pre><p>&#12371;&#12371;&#12414;&#12391;&#12391;&#12365;&#12428;&#12400;&#12289;&#23455;&#38555;&#12395;&#38306;&#25968;&#12434;&#20351;&#12358;&#12392;&#12365;&#12399;&#12471;&#12531;&#12503;&#12523;&#12391;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\">SELECT\r\n  &hellip;\r\n  get_purchase_product_segment(d.product_summary) AS purchase_product_segment,\r\n  &hellip;\r\nFROM\r\n  ${ref('customer_order_total')} t\r\n&#12288;&hellip;\r\nLEFT JOIN ${ref('customer_order_line_detail')} d\r\n  ON t.customer_id = d.customer_id<\/pre><p>&#12371;&#12398;&#20966;&#29702;&#12398;&#22522;&#26412;&#12434;&#38957;&#12395;&#20837;&#12428;&#12390;&#12418;&#12425;&#12387;&#12390;&#12363;&#12425;&#25913;&#12417;&#12390;customer&#12486;&#12540;&#12502;&#12523;&#12398;SQL&#20840;&#20307;&#12434;&#35211;&#12427;&#12392;&#12289;JavaScript&#12395;&#12424;&#12427;&#12487;&#12540;&#12479;&#21152;&#24037;&#12398;&#27969;&#12428;&#12364;&#35211;&#12360;&#12390;&#12367;&#12427;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;<\/p><p>&#12402;&#12392;&#24037;&#22827;&#12364;&#24517;&#35201;&#12391;&#12399;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12434;&#12418;&#12392;&#12395;&#38598;&#32004;&#12377;&#12427;&#22580;&#21512;&#12420;&#12289;FOR&#12523;&#12540;&#12503;&#12434;&#20351;&#12356;&#12383;&#12356;&#22580;&#21512;&#12289;&#22810;&#27573;&#38542;&#12398;&#22793;&#25968;&#20966;&#29702;&#12364;&#20837;&#12427;&#22580;&#21512;&#12394;&#12393;&#12399;JavaScript&#12395;&#12424;&#12427;&#23455;&#35013;&#12398;&#26041;&#12364;&#26377;&#21033;&#12391;&#12377;&#12290;&#24540;&#29992;&#32232;&#12392;&#12375;&#12390;&#12289;&#12380;&#12402;&#35226;&#12360;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A7%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E5%A4%96%E9%83%A8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%8C%96\"><\/span>&#9319;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12398;&#22806;&#37096;&#12486;&#12540;&#12502;&#12523;&#21270;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>&#20803;&#12398;&#12487;&#12540;&#12479;&#12477;&#12540;&#12473;&#12395;&#31435;&#12385;&#25147;&#12426;&#12414;&#12377;&#12290;&#20170;&#22238;&#12399;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12434;&#12487;&#12540;&#12479;&#12477;&#12540;&#12473;&#12395;&#12375;&#12390;&#12356;&#12414;&#12377;&#12364;&#12289;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#12434;&#38598;&#35336;&#23550;&#35937;&#12392;&#12377;&#12427;&#12395;&#12399;BigQuery&#12398;&#22806;&#37096;&#12486;&#12540;&#12502;&#12523;&#12392;&#12375;&#12390;&#20316;&#12387;&#12390;&#12362;&#12367;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#12418;&#12385;&#12429;&#12435;BigQuery&#19978;&#12398;&#25163;&#20316;&#26989;&#12391;&#22806;&#37096;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;&#12377;&#12427;&#12371;&#12392;&#12418;&#12391;&#12365;&#12414;&#12377;&#12364;&#12289;&#20877;&#29694;&#24615;&#12398;&#35251;&#28857;&#12391;&#12399;Dataform&#19978;&#12391;&#23455;&#35013;&#12391;&#12365;&#12390;&#12356;&#12383;&#12411;&#12358;&#12364;&#12424;&#12356;&#12391;&#12375;&#12423;&#12358;&#12290;<\/p><p>&#20966;&#29702;&#12392;&#12375;&#12390;&#12399;&#12289;CREATE OR REPLACE EXTERNAL TABLE&#12398;&#12513;&#12477;&#12483;&#12489;&#12434;&#20351;&#12356;&#12414;&#12377;&#12290;&#12467;&#12484;&#12392;&#12375;&#12390;&#12399;&#12289;<\/p><ul>\n<li>\n<div>OPTIONS&#12395;&#12390;&#23550;&#35937;&#12471;&#12540;&#12488;&#12434;&#23450;&#32681;&#12377;&#12427;&#12290;<\/div>\n<\/li>\n<li>config.type=operations&#12398;&#12383;&#12417;&#12289;Dataform&#12398;&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;&#65288;COMPILED GRAPH&#65289;&#12395;&#30331;&#22580;&#12373;&#12379;&#12427;&#12383;&#12417;&#12395;config.hasOutput:true&#12395;&#35373;&#23450;&#12375;&#12390;&#12362;&#12367;&#12290;<\/li>\n<\/ul><p>&#12434;&#25276;&#12373;&#12360;&#12390;&#12362;&#12365;&#12383;&#12356;&#12392;&#12371;&#12429;&#12391;&#12377;&#12290;&#20197;&#19979;&#12395;ec_customer&#12486;&#12540;&#12502;&#12523;&#12398;SQL&#12434;&#36578;&#36617;&#12375;&#12414;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\" title=\"definitions\/sources\/ec_customer.sqlx\">config {\r\n  type: 'operations',\r\n  schema: 'sales_sample_sources',\r\n  name: 'ec_customer',\r\n  description: 'EC&#12398;&#39015;&#23458;&#19968;&#35239;&#65288;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#21442;&#29031;&#65289;',\r\n  hasOutput: true,\r\n  tags: ['99_sources']\r\n}\r\n\r\nCREATE OR REPLACE EXTERNAL TABLE `sales_sample_sources.ec_customer` (\r\n  customer_id STRING OPTIONS(description='&#39015;&#23458;ID'),\r\n  gender STRING OPTIONS(description='&#24615;&#21029;'),\r\n  date_of_birth DATE OPTIONS(description='&#35477;&#29983;&#26085;'),\r\n  prefecture STRING OPTIONS(description='&#37117;&#36947;&#24220;&#30476;'),\r\n  region STRING OPTIONS(description='&#22320;&#22495;')\r\n)\r\nOPTIONS (\r\n  description = 'EC&#39015;&#23458;&#19968;&#35239;&#65288;&#12473;&#12503;&#12524;&#12483;&#12489;&#12471;&#12540;&#12488;&#21442;&#29031;&#65289;',\r\n  format = 'GOOGLE_SHEETS',\r\n  uris = ['https:\/\/docs.google.com\/spreadsheets\/d\/${dataform.projectConfig.vars.SOURCE_SPREADSHEET_ID}'],\r\n  sheet_range = \"'ec_customer'!A:E\",\r\n  skip_leading_rows = 1\r\n);<\/pre><h4><span class=\"ez-toc-section\" id=\"%E2%91%A8%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0\"><\/span>&#9320;&#12497;&#12540;&#12486;&#12451;&#12471;&#12519;&#12491;&#12531;&#12464;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>BigQuery&#12399;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#12456;&#12531;&#12472;&#12531;&#12364;&#38750;&#24120;&#12395;&#24375;&#21147;&#12394;&#12383;&#12417;&#12289;&#12393;&#12435;&#12394;&#12395;&#12486;&#12540;&#12502;&#12523;&#12364;&#22823;&#12365;&#12367;&#12390;&#12418;&#25968;&#31186;&#65374;&#25968;&#21313;&#31186;&#12367;&#12425;&#12356;&#12391;SQL&#12434;&#23455;&#34892;&#12375;&#12365;&#12387;&#12390;&#12375;&#12414;&#12356;&#12414;&#12377;&#12290;&#12375;&#12363;&#12375;&#12289;&#24467;&#37327;&#35506;&#37329;&#12398;BigQuery&#12399;SELECT&#12398;&#12383;&#12417;&#12395;&#12473;&#12461;&#12515;&#12531;&#12375;&#12383;&#34892;&#12392;&#21015;&#12398;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;&#12395;&#24540;&#12376;&#12383;&#35506;&#37329;&#12364;&#30330;&#29983;&#12377;&#12427;&#12383;&#12417;&#12289;&#12416;&#12420;&#12415;&#12420;&#12383;&#12425;&#12392;&#22823;&#12365;&#12394;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#12387;&#12390;&#38598;&#35336;&#12377;&#12427;&#12392;&#25968;&#21313;&#19975;&#65374;&#25968;&#30334;&#19975;&#20870;&#12398;&#35506;&#37329;&#12364;&#30330;&#29983;&#12375;&#12390;&#12300;BigQuery&#12391;&#12295;&#12295;&#19975;&#20870;&#28342;&#12363;&#12375;&#12383;&#20154;&#12301;&#12415;&#12383;&#12356;&#12394;&#24754;&#21127;&#12364;&#30330;&#29983;&#12375;&#12364;&#12385;&#12391;&#12377;&#12290;<\/p><p>&#22823;&#12365;&#12367;&#12394;&#12426;&#12364;&#12385;&#12394;&#12486;&#12540;&#12502;&#12523;&#12398;&#31558;&#38957;&#12399;&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#12434;&#12393;&#12435;&#12393;&#12435;&#33988;&#31309;&#12375;&#12390;&#12356;&#12367;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#31995;&#12486;&#12540;&#12502;&#12523;&#12391;&#12377;&#12364;&#12289;&#12473;&#12461;&#12515;&#12531;&#37327;&#12434;&#28187;&#12425;&#12377;&#12383;&#12417;&#12395;&#12486;&#12540;&#12502;&#12523;&#12434;&#20998;&#12369;&#12427;&#12392;&#12356;&#12358;&#12398;&#12399;&#26412;&#26411;&#36578;&#20498;&#12391;&#12377;&#12290;&#12371;&#12398;&#21839;&#38988;&#12395;&#23550;&#12375;&#12390;Google&#12364;&#25552;&#20379;&#12375;&#12390;&#12356;&#12427;&#20181;&#32068;&#12415;&#12364;&#12289;<a href=\"https:\/\/cloud.google.com\/bigquery\/docs\/partitioned-tables?hl=ja\" target=\"_blank\" rel=\"noopener noreferrer\">&#12497;&#12540;&#12486;&#12451;&#12471;&#12519;&#12531;&#20998;&#21106;&#12486;&#12540;&#12502;&#12523;<\/a>&#12394;&#12356;&#12375;&#12497;&#12540;&#12486;&#12451;&#12471;&#12519;&#12491;&#12531;&#12464;&#12392;&#12356;&#12358;&#20181;&#32068;&#12415;&#12391;&#12377;&#12290;<\/p><p>&#12486;&#12540;&#12502;&#12523;&#12434;&#26085;&#20184;&#12459;&#12521;&#12512;&#12434;&#12418;&#12392;&#12395;&#30097;&#20284;&#30340;&#12395;&#20998;&#21106;&#12375;&#12289;SELECT&#12398;&#38555;&#12395;WHERE&#21477;&#12391;&#12381;&#12398;&#26085;&#20184;&#12459;&#12521;&#12512;&#12395;&#12424;&#12387;&#12390;&#32094;&#12427;&#12371;&#12392;&#12391;&#12289;&#12473;&#12461;&#12515;&#12531;&#23550;&#35937;&#12398;&#34892;&#12434;&#32094;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;&#12371;&#12398;&#20181;&#32068;&#12415;&#12434;&#20351;&#12358;&#12392;&#12289;&#20363;&#12360;&#12400;&#30452;&#36817;7&#26085;&#38291;&#12398;&#12487;&#12540;&#12479;&#12398;&#12415;&#12434;&#27598;&#26085;&#20877;&#38598;&#35336;&#12377;&#12427;&#12424;&#12358;&#12394;&#20181;&#32068;&#12415;&#12364;&#21487;&#33021;&#12398;&#12383;&#12417;&#12289;&#12473;&#12461;&#12515;&#12531;&#12377;&#12427;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;&#12434;&#26689;&#36949;&#12356;&#12395;&#28187;&#12425;&#12377;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;<\/p><p>&#20170;&#12414;&#12391;&#30331;&#22580;&#12375;&#12383;&#12377;&#12409;&#12390;&#12398;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#31995;&#12486;&#12540;&#12502;&#12523;&#12391;&#12375;&#12428;&#12387;&#12392;&#35373;&#23450;&#12375;&#12390;&#12356;&#12414;&#12377;&#12364;&#12289;&#23455;&#12399;&#12381;&#12398;&#23450;&#32681;&#12398;&#26041;&#27861;&#12364;2&#12497;&#12479;&#12540;&#12531;&#12395;&#20998;&#12363;&#12428;&#12390;&#12356;&#12414;&#12377;&#12290;&#12392;&#12356;&#12358;&#12398;&#12418;&#12289;config.type:'table'&#12398;&#22580;&#21512;&#12392;&#12289;config.type:'operations'&#12398;&#22580;&#21512;&#12391;&#26360;&#12365;&#26041;&#12364;&#36949;&#12358;&#12435;&#12391;&#12377;&#12290;<\/p><h5>config.type:'table'&#12398;&#22580;&#21512;<\/h5><p>config&#35373;&#23450;&#12395;&#12390;&#23450;&#32681;&#12391;&#12365;&#12414;&#12377;&#12290;&#20855;&#20307;&#30340;&#12395;&#12399;&#12289;config.bigquery.partitionBy&#12395;&#12390;&#35373;&#23450;&#12364;&#21487;&#33021;&#12391;&#12377;&#12290;&#20197;&#19979;&#12398;&#20363;&#12399;&#12289;shop_order_line_with_discount&#12398;&#25244;&#31883;&#12391;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\">config {\r\n  type: 'table',\r\n  schema: 'sales_sample_output',\r\n  name: 'shop_order_line_with_discount',\r\n  description: '&#24215;&#38957;&#27880;&#25991;&#26126;&#32048;&#65288;&#20516;&#24341;&#12365;&#24773;&#22577;&#20877;&#29694;&#65289;',\r\n  columns: {\r\n    receipt_id: '&#12524;&#12471;&#12540;&#12488;ID',\r\n    order_line_index: '&#26126;&#32048;&#30058;&#21495;',\r\n    create_date: '&#26085;&#20184;',\r\n    product_name: '&#21830;&#21697;&#21517;',\r\n    product_id: '&#21830;&#21697;ID',\r\n    product_category: '&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;',\r\n    quantity: '&#25968;&#37327;',\r\n    line_price: '&#26126;&#32048;&#20385;&#26684;',\r\n    line_discount: '&#26126;&#32048;&#20516;&#24341;&#12365;&#38989;',\r\n    line_price_before_discount: '&#20516;&#24341;&#12365;&#21069;&#26126;&#32048;&#20385;&#26684;',\r\n    customer_id: '&#39015;&#23458;ID'\r\n  },\r\n  bigquery: {\r\n    partitionBy: 'create_date'\r\n  },\r\n  tags: ['01_clensing_from_outer_tables']\r\n}<\/pre><h5>config.type:'operations'&#12398;&#22580;&#21512;<\/h5><p>&#12486;&#12540;&#12502;&#12523;&#20316;&#25104;&#12398;&#38555;&#12395;&#12289;&#12459;&#12521;&#12512;&#23450;&#32681;&#12434;&#26360;&#12356;&#12383;&#24460;&#12395;PARTITION BY&#21477;&#12434;&#20837;&#12428;&#12427;&#12371;&#12392;&#12391;&#35373;&#23450;&#12391;&#12365;&#12414;&#12377;&#12290;&#20197;&#19979;&#12398;&#20363;&#12399;ec_order_line_with_date&#12398;&#25244;&#31883;&#12391;&#12377;&#12290;<\/p><pre class=\"lang:default decode:true\">CREATE TABLE IF NOT EXISTS `sales_sample_output.ec_order_line_with_date` (\r\n  order_id STRING OPTIONS(description='&#27880;&#25991;ID'),\r\n  order_line_index INT64 OPTIONS(description='&#26126;&#32048;&#30058;&#21495;'),\r\n  create_date DATE OPTIONS(description='&#26085;&#20184;'),\r\n  create_datetime DATETIME OPTIONS(description='&#26085;&#26178;'),\r\n  customer_id STRING OPTIONS(description='&#39015;&#23458;ID'),\r\n  product_name STRING OPTIONS(description='&#21830;&#21697;&#21517;'),\r\n  product_id STRING OPTIONS(description='&#21830;&#21697;ID'),\r\n  product_category STRING OPTIONS(description='&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;'),\r\n  quantity INT64 OPTIONS(description='&#25968;&#37327;'),\r\n  line_price INT64 OPTIONS(description='&#26126;&#32048;&#20385;&#26684;'),\r\n  line_discount INT64 OPTIONS(description='&#26126;&#32048;&#20516;&#24341;&#12365;&#38989;'),\r\n  line_price_before_discount INT64 OPTIONS(description='&#20516;&#24341;&#12365;&#21069;&#26126;&#32048;&#20385;&#26684;')\r\n)\r\nPARTITION BY create_date\r\nOPTIONS (\r\n  description = 'EC&#27880;&#25991;&#26126;&#32048;&#65288;&#26085;&#20184;&#24773;&#22577;&#12434;&#35036;&#23436;&#65289;'\r\n);\r\n<\/pre><h4><span class=\"ez-toc-section\" id=\"%E2%91%A9%E3%81%9D%E3%81%AE%E4%BB%96%E7%B4%B0%E3%81%8B%E3%81%84config%E8%A8%AD%E5%AE%9A\"><\/span>&#9321;&#12381;&#12398;&#20182;&#32048;&#12363;&#12356;config&#35373;&#23450;<span class=\"ez-toc-section-end\"><\/span><\/h4><p>Dataform&#12391;&#12398;&#12487;&#12540;&#12479;&#12497;&#12452;&#12503;&#12521;&#12452;&#12531;&#20316;&#25104;&#12391;&#12399;&#12289;SQL&#12434;&#26360;&#12367;&#12371;&#12392;&#12392;&#21516;&#12376;&#12367;&#12425;&#12356;&#12289;&#20882;&#38957;&#12398;config&#12434;&#36969;&#20999;&#12395;&#26360;&#12367;&#12371;&#12392;&#12364;&#37325;&#35201;&#12391;&#12377;&#12290;&#12392;&#12356;&#12358;&#12398;&#12418;&#12289;Dataform&#12391;&#20316;&#25104;&#12373;&#12379;&#12383;SQLX&#12501;&#12449;&#12452;&#12523;&#12399;&#12371;&#12398;config&#12398;&#24773;&#22577;&#12398;&#12415;&#12434;&#25345;&#12387;&#12390;&#31649;&#29702;&#12373;&#12428;&#12427;&#12363;&#12425;&#12391;&#12377;&#12290;<\/p><p>&#24517;&#38920;&#38917;&#30446;&#12391;&#12354;&#12427;config.type&#12434;&#38500;&#12365;&#12289;&#20849;&#36890;&#12375;&#12390;&#35373;&#23450;&#12375;&#12390;&#12362;&#12367;&#12409;&#12365;5&#12388;&#12398;&#12497;&#12521;&#12513;&#12540;&#12479;&#65288;schema, name, description, hasOutput, tags&#65289;&#12395;&#12388;&#12356;&#12390;&#30906;&#35469;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><h5>config.schema<\/h5><p>&#12371;&#12398;SQLX&#12501;&#12449;&#12452;&#12523;&#12391;&#21442;&#29031;&#12373;&#12428;&#12427;&#12486;&#12540;&#12502;&#12523;&#12364;BigQuery&#19978;&#12391;&#12393;&#12398;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12395;&#35442;&#24403;&#12377;&#12427;&#12363;&#12434;&#23450;&#32681;&#12377;&#12427;&#12418;&#12398;&#12391;&#12377;&#12290;&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12399; [workflow_settings.yaml] &#12395;&#12390;&#23450;&#32681;&#12373;&#12428;&#12414;&#12377;&#12364;&#12289;&#35079;&#25968;&#12398;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12395;&#12414;&#12383;&#12364;&#12427;&#22580;&#21512;&#12399;&#26126;&#31034;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#32080;&#35542;&#12289;&#20840;&#12390;&#12398;SQLX&#12501;&#12449;&#12452;&#12523;&#12391;&#26126;&#31034;&#30340;&#12395;&#26360;&#12367;&#12371;&#12392;&#12364;&#25512;&#22888;&#12391;&#12377;&#12290;<\/p><p>&#12392;&#12356;&#12358;&#12398;&#12418;&#12289;config.schema&#12364;&#21046;&#24481;&#12377;&#12427;&#31684;&#22258;&#12364;&#38480;&#23450;&#30340;&#12392;&#12394;&#12387;&#12390;&#12356;&#12427;&#12363;&#12425;&#12391;&#12377;&#12290;&#20855;&#20307;&#30340;&#12395;&#12399;&#12289;<\/p><ul>\n<li>ref&#38306;&#25968;&#12420;COMPILED GRAPH&#65288;&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;&#65289;&#12364;&#12486;&#12540;&#12502;&#12523;&#12434;&#25506;&#12377;&#38555;&#12399;&#12289;config.schema&#12398;&#12415;&#12434;&#21442;&#29031;&#12377;&#12427;&#25369;&#21205;&#12434;&#21462;&#12427;&#12290;<br>\n&rarr;config.type:'operations'&#12398;SQL&#20869;&#12391;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12434;&#26126;&#31034;&#12375;&#12390;&#12356;&#12383;&#12392;&#12375;&#12390;&#12418;&#12289;config.schema&#12434;&#23450;&#32681;&#12375;&#12390;&#12356;&#12394;&#12369;&#12428;&#12400;&#12289;&#21213;&#25163;&#12395;&#12487;&#12501;&#12457;&#12523;&#12488;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12434;&#21442;&#29031;&#12373;&#12428;&#12390;&#12456;&#12521;&#12540;&#12395;&#32331;&#12364;&#12426;&#12420;&#12377;&#12356;&#12290;<\/li>\n<li>&#36870;&#12395;&#12289;config.type:'operations'&#12391;&#12399;&#12289;config.schema&#12391;&#23450;&#32681;&#12375;&#12383;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12395;&#12424;&#12387;&#12390;SQL&#12398;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12434;&#19978;&#26360;&#12365;&#12375;&#12390;&#12367;&#12428;&#12394;&#12356;&#12290;<br>\n&rarr;config.type:'operations'&#12391;&#12399;&#12289;SQL&#20869;&#12391;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#12434;&#26126;&#31034;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12427;&#12290;<\/li>\n<\/ul><p>&#12392;&#12356;&#12358;2&#28857;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#32048;&#12363;&#12356;&#12371;&#12392;&#12434;&#32771;&#12360;&#12378;&#12395;&#20840;&#12390;&#12398;SQLX&#12501;&#12449;&#12452;&#12523;&#12391;&#26126;&#31034;&#30340;&#12395;&#26360;&#12367;&#12371;&#12392;&#12364;&#12289;&#12523;&#12540;&#12523;&#12392;&#12375;&#12390;&#12418;&#20998;&#12363;&#12426;&#12420;&#12377;&#12356;&#12391;&#12377;&#12375;&#12289;config&#12384;&#12369;&#12434;&#35211;&#12390;&#12362;&#12362;&#12424;&#12381;&#12501;&#12449;&#12452;&#12523;&#12398;&#29702;&#35299;&#12364;&#12391;&#12365;&#12390;&#35501;&#12415;&#25163;&#12395;&#12418;&#20778;&#12375;&#12356;&#12398;&#12391;&#25512;&#22888;&#12391;&#12377;&#12290;<\/p><h5>config.name<\/h5><p>SQLX&#12398;&#12501;&#12449;&#12452;&#12523;&#21517;&#12391;&#12377;&#12290;&#12487;&#12501;&#12457;&#12523;&#12488;&#12399;&#12501;&#12449;&#12452;&#12523;&#21517;&#12398;&#25313;&#24373;&#23376;&#12434;&#38500;&#12356;&#12383;&#37096;&#20998;&#12395;&#12394;&#12426;&#12414;&#12377;&#12364;&#12289;config.schema&#12392;&#21516;&#12376;&#12367;&#20840;&#12390;&#12398;&#12501;&#12449;&#12452;&#12523;&#12391;&#26126;&#31034;&#30340;&#12395;&#35373;&#23450;&#12377;&#12427;&#12371;&#12392;&#25512;&#22888;&#12391;&#12377;&#12290;&#12392;&#12356;&#12358;&#12398;&#12418;&#12289;config&#12395;&#12487;&#12540;&#12479;&#12475;&#12483;&#12488;&#21517;&#12384;&#12369;&#26360;&#12363;&#12428;&#12390;&#12356;&#12390;&#12486;&#12540;&#12502;&#12523;&#21517;&#12364;&#12394;&#12356;&#12398;&#12399;&#12289;&#30452;&#24863;&#30340;&#12395;&#35501;&#12415;&#12395;&#12367;&#12356;&#12363;&#12425;&#12391;&#12377;&#12290;<\/p><p>&#12524;&#12450;&#12465;&#12540;&#12473;&#12395;&#23550;&#12377;&#12427;&#27880;&#24847;&#28857;&#12392;&#12375;&#12390;&#12289;config.type:'operations'&#12398;SQLX&#12501;&#12449;&#12452;&#12523;&#12391;&#20013;&#38291;&#12486;&#12540;&#12502;&#12523;&#12434;&#21547;&#12417;&#12390;&#35079;&#25968;&#12398;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;&#12377;&#12427;&#22580;&#21512;&#12289;ref&#38306;&#25968;&#12391;&#20182;&#12501;&#12449;&#12452;&#12523;&#12363;&#12425;&#21442;&#29031;&#12375;&#12383;&#12356;&#12486;&#12540;&#12502;&#12523;&#21517;&#12391;config.name&#12434;&#26360;&#12356;&#12390;&#12362;&#12367;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;<\/p><p>&#20170;&#22238;&#12398;&#20363;&#12391;&#12418;&#12289;&#9316;&#24046;&#20998;&#20966;&#29702;&#12398;&#23455;&#35013;&#65288;MERGE&#21477;&#65289;&#12391;&#32057;&#20171;&#12375;&#12390;&#12356;&#12427;&#12424;&#12358;&#12394;&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12486;&#12540;&#12502;&#12523;&#12391;&#12399;&#32047;&#31309;&#12486;&#12540;&#12502;&#12523;&#12392;&#24046;&#20998;&#12486;&#12540;&#12502;&#12523;&#12364;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;config.name&#12391;&#25351;&#23450;&#12375;&#12390;&#12356;&#12427;&#12398;&#12399;&#12418;&#12385;&#12429;&#12435;&#32047;&#31309;&#12486;&#12540;&#12502;&#12523;&#12398;&#26041;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><h5>config.description<\/h5><p>SQLX&#12501;&#12449;&#12452;&#12523;&#12398;&#35500;&#26126;&#12391;&#12377;&#12290;&#12371;&#12371;&#12395;&#35500;&#26126;&#12434;&#26360;&#12369;&#12400;&#12289;BigQuery&#19978;&#12391;&#12486;&#12540;&#12502;&#12523;&#12398;&#35500;&#26126;&#12395;&#21453;&#26144;&#12373;&#12428;&#12427;&#12398;&#12391;&#20415;&#21033;&#12391;&#12377;&#12290;&#12380;&#12402;&#35373;&#23450;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><p>&#12394;&#12362;&#12289;&#20363;&#12395;&#28431;&#12428;&#12378;config.type:'operations'&#12398;&#22580;&#21512;&#12399;config.description&#12395;&#26360;&#12356;&#12390;&#12418;BigQuery&#12486;&#12540;&#12502;&#12523;&#12395;&#12399;&#21453;&#26144;&#12373;&#12428;&#12414;&#12379;&#12435;&#12290;BigQuery&#12486;&#12540;&#12502;&#12523;&#12398;&#35500;&#26126;&#12395;&#28961;&#29702;&#12420;&#12426;&#21453;&#26144;&#12377;&#12427;&#12395;&#12399;&#12289;&#12486;&#12540;&#12502;&#12523;&#20316;&#25104;&#26178;&#12398;OPTIONS&#12395;description&#12497;&#12521;&#12513;&#12540;&#12479;&#12434;&#35373;&#23450;&#12377;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;<\/p><p>&#37325;&#35079;&#20837;&#21147;&#12395;&#12399;&#12394;&#12426;&#12414;&#12377;&#12364;&#12289;&#35501;&#12415;&#25163;&#12408;&#12398;&#20778;&#12375;&#12373;&#12434;&#32771;&#12360;&#12428;&#12400;&#20849;&#36890;&#12375;&#12390;&#35352;&#36848;&#12375;&#12390;&#12362;&#12367;&#12409;&#12365;&#12391;&#12375;&#12423;&#12358;&#12290;<\/p><h5>config.hasOutput<\/h5><p>ref&#38306;&#25968;&#12398;&#21442;&#29031;&#20808;&#12395;&#12391;&#12365;&#12427;&#12424;&#12358;&#12395;&#12377;&#12427;&#12363;&#12289;COMPILED GRAPH&#65288;&#12487;&#12540;&#12479;&#12522;&#12493;&#12540;&#12472;&#65289;&#12395;&#30331;&#22580;&#12373;&#12379;&#12427;&#12363;&#12398;&#12497;&#12521;&#12513;&#12540;&#12479;&#12391;&#12377;&#12290;&#36890;&#24120;&#12399;&#12487;&#12501;&#12457;&#12523;&#12488;&#12391;true&#12391;&#12377;&#12364;&#12289;config.type:'operations'&#12398;&#22580;&#21512;&#12398;&#12415;&#12487;&#12501;&#12457;&#12523;&#12488;&#12364;false&#12398;&#12383;&#12417;&#12289;&#27880;&#24847;&#12364;&#24517;&#35201;&#12391;&#12377;&#12290;<\/p><p>&#20182;&#12486;&#12540;&#12502;&#12523;&#12363;&#12425;&#21442;&#29031;&#12375;&#12358;&#12427;&#22580;&#21512;&#12399;&#12289;&#24536;&#12428;&#12378;config.hasOut:true &#12395;&#35373;&#23450;&#12375;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><h5>config.tags<\/h5><p>&#23455;&#34892;&#26178;&#12395;&#12414;&#12392;&#12417;&#12390;&#23455;&#34892;&#12377;&#12427;&#21336;&#20301;&#12434;&#12479;&#12464;&#12392;&#12375;&#12390;&#35373;&#23450;&#21487;&#33021;&#12391;&#12377;&#12290;&#23455;&#34892;&#12479;&#12452;&#12511;&#12531;&#12464;&#12398;&#30064;&#12394;&#12427;SQLX&#12501;&#12449;&#12452;&#12523;&#12395;&#21517;&#21069;&#12434;&#20184;&#12369;&#12390;&#12479;&#12464;&#12392;&#12375;&#12390;&#35373;&#23450;&#12375;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<\/p><h3><span class=\"ez-toc-section\" id=\"%E3%81%BE%E3%81%A8%E3%82%81\"><\/span>&#12414;&#12392;&#12417;<span class=\"ez-toc-section-end\"><\/span><\/h3><p>&#38263;&#12367;&#12394;&#12426;&#12414;&#12375;&#12383;&#12364;&#12289;Dataform&#12398;&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#22522;&#26412;&#12398;&#22411;&#12392;&#12375;&#12390;&#9312;&#65374;&#9321;&#12398;10&#28857;&#12434;&#12414;&#12392;&#12417;&#12414;&#12375;&#12383;&#12290;&#12371;&#12428;&#12425;&#12434;&#25276;&#12373;&#12360;&#12390;&#12362;&#12369;&#12400;&#12289;&#12392;&#12387;&#12363;&#12363;&#12426;&#12392;&#12375;&#12390;&#12399;&#21313;&#20998;&#12391;&#12399;&#12394;&#12356;&#12363;&#12394;&hellip;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;<\/p><p>&#12394;&#12362;&#12289;&#20170;&#22238;&#12398;&#12487;&#12540;&#12479;&#12477;&#12540;&#12473;&#12398;&#12469;&#12531;&#12503;&#12523;&#12399;&#12354;&#12427;&#24847;&#21619;&#29694;&#23455;&#30340;&#12391;&#12384;&#12356;&#12406;&#27738;&#12356;&#12383;&#12417;&#12289;&#12356;&#12367;&#12388;&#12363;&#12414;&#12393;&#12429;&#12387;&#12371;&#12375;&#12356;&#12487;&#12540;&#12479;&#12398;&#21152;&#24037;&#12364;&#24517;&#35201;&#12395;&#12394;&#12387;&#12390;&#12356;&#12414;&#12377;&#12290;SQL&#12434;&#32048;&#12363;&#12367;&#35501;&#12435;&#12384;&#20154;&#12364;&#12300;&#12394;&#12380;&#12371;&#12435;&#12394;&#12371;&#12392;&#12434;&hellip;&#65311;&#12301;&#12392;&#24605;&#12356;&#12364;&#12385;&#12394;&#12509;&#12452;&#12531;&#12488;&#12434;4&#12388;&#12411;&#12393;&#25369;&#12370;&#12390;&#12362;&#12365;&#12414;&#12377;&#12290;<\/p><ol>\n<li>BigQuery&#12391;&#36027;&#29992;&#12434;&#25233;&#12360;&#12427;&#12395;&#12399;&#26085;&#20184;&#12487;&#12540;&#12479;&#31561;&#12391;&#12398;&#12497;&#12540;&#12486;&#12451;&#12471;&#12519;&#12491;&#12531;&#12464;&#12399;&#19981;&#21487;&#27424;&#12290;&#12384;&#12364;&#27491;&#35215;&#21270;&#12373;&#12428;&#12390;&#12356;&#12427;EC&#27880;&#25991;&#26126;&#32048;&#12398;&#20803;&#12487;&#12540;&#12479;&#12395;&#12399;&#26085;&#20184;&#24773;&#22577;&#12364;&#12394;&#12356;&#12383;&#12417;&#12289;&#35036;&#23436;&#12398;&#12383;&#12417;&#12395;&#22823;&#20803;&#12398;EC&#27880;&#25991;&#19968;&#35239;&#12486;&#12540;&#12502;&#12523;&#12434;&#12472;&#12519;&#12452;&#12531;&#12375;&#12390;&#12356;&#12427;&#12290;<\/li>\n<li>&#24215;&#38957;&#12398;&#26041;&#12398;&#27880;&#25991;&#26126;&#32048;&#12395;&#12399;&#12289;&#26368;&#32066;&#30340;&#12394;&#36009;&#22770;&#20385;&#26684;&#12375;&#12363;&#35352;&#37682;&#12373;&#12428;&#12390;&#12356;&#12394;&#12356;&#12383;&#12417;&#12289;&#23450;&#20385;&#12420;&#20516;&#24341;&#12365;&#38989;&#12364;&#20998;&#12363;&#12425;&#12394;&#12356;&#12290;&#12381;&#12398;&#12383;&#12417;&#12289;&#21830;&#21697;&#19968;&#35239;&#12434;&#12472;&#12519;&#12452;&#12531;&#12375;&#12390;&#23450;&#20385;&#12434;&#32016;&#12389;&#12369;&#12289;&#20516;&#24341;&#12365;&#38989;&#12434;&#20877;&#29694;&#12375;&#12390;&#12356;&#12427;&#12290;<\/li>\n<li>&#24215;&#38957;&#12398;&#27880;&#25991;&#12487;&#12540;&#12479;&#12399;&#26126;&#32048;&#21336;&#20301;&#12375;&#12363;&#12394;&#12356;&#12383;&#12417;&#12289;&#26126;&#32048;&#24773;&#22577;&#12434;&#12524;&#12471;&#12540;&#12488;ID&#21336;&#20301;&#12391;&#12518;&#12491;&#12540;&#12463;&#21270;&#12375;&#12390;&#27880;&#25991;&#12486;&#12540;&#12502;&#12523;&#12392;&#12375;&#12390;&#12356;&#12427;&#12290;&#12394;&#12362;&#12289;&#20516;&#24341;&#12365;&#24773;&#22577;&#12398;&#23436;&#20840;&#20877;&#29694;&#12399;&#19981;&#21487;&#33021;&#12394;&#12383;&#12417;&#12289;&#20516;&#24341;&#12365;&#12399;&#26126;&#32048;&#21336;&#20301;&#12395;&#12381;&#12398;&#12414;&#12414;&#21106;&#12426;&#25391;&#12426;&#12289;&#27880;&#25991;&#21336;&#20301;&#12398;&#20516;&#24341;&#12365;&#12399;0&#20870;&#12392;&#12375;&#12390;&#12356;&#12427;&#12290;<\/li>\n<li>&#12522;&#12493;&#12540;&#12472;&#12434;&#32186;&#40599;&#12395;&#12377;&#12427;&#12383;&#12417;&#12289;EC&#20596;&#12398;&#27880;&#25991;&#26126;&#32048;&#12395;&#12418;&#21830;&#21697;&#19968;&#35239;&#12486;&#12540;&#12502;&#12523;&#12434;&#12472;&#12519;&#12452;&#12531;&#12290;EC&#12392;&#24215;&#38957;&#12398;&#12487;&#12540;&#12479;&#12434;&#32080;&#21512;&#12375;&#12390;&#27880;&#25991;&#26126;&#32048;&#12486;&#12540;&#12502;&#12523;&#12395;&#12375;&#12383;&#12392;&#12365;&#12395;&#12289;&#21830;&#21697;&#21517;&#12420;&#21830;&#21697;&#12459;&#12486;&#12468;&#12522;&#12394;&#12393;&#12364;1&#12486;&#12540;&#12502;&#12523;&#12395;&#25539;&#12387;&#12390;&#12356;&#12427;&#29366;&#24907;&#12392;&#12375;&#12383;&#12290;<\/li>\n<\/ol><p>&#12487;&#12540;&#12479;&#20966;&#29702;&#12398;&#23455;&#21209;&#12399;&#24605;&#12431;&#12396;&#12392;&#12371;&#12429;&#12391;&#36499;&#12365;&#12364;&#12385;&#12391;&#12289;&#22823;&#22793;&#12391;&#12377;&#12397;&#12290;<\/p><p>&#12371;&#12398;&#35352;&#20107;&#12364;&#12356;&#12388;&#12363;&#12393;&#12371;&#12363;&#12398;&#35504;&#12363;&#12398;&#22411;&#12398;&#21161;&#12369;&#12395;&#12394;&#12428;&#12400;&#24184;&#12356;&#12391;&#12377;&#12290;<\/p><h3><span class=\"ez-toc-section\" id=\"%E3%81%8A%E3%81%BE%E3%81%91%EF%BC%9ADataform%E3%81%A8GitHub%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA%E6%96%B9%E6%B3%95\"><\/span>&#12362;&#12414;&#12369;&#65306;Dataform&#12392;GitHub&#12392;&#12398;&#36899;&#25658;&#26041;&#27861;<span class=\"ez-toc-section-end\"><\/span><\/h3><p>&#26368;&#24460;&#12395;&#12289;&#26412;&#35352;&#20107;&#12391;&#12418;&#21033;&#29992;&#12375;&#12390;&#12356;&#12427;GitHub&#12503;&#12525;&#12472;&#12455;&#12463;&#12488;&#12398;&#12467;&#12540;&#12489;&#21516;&#26399;&#12395;&#12388;&#12356;&#12390;&#12418;&#26360;&#12356;&#12390;&#12362;&#12365;&#12414;&#12377;&#12290;<\/p><p>Dataform&#12399;&#29872;&#22659;&#12398;&#21306;&#21029;&#12420;&#26412;&#30058;&#29872;&#22659;&#12408;&#12398;&#12467;&#12511;&#12483;&#12488;&#12398;&#27010;&#24565;&#12399;&#12354;&#12427;&#12418;&#12398;&#12398;&#12289;&#12496;&#12540;&#12472;&#12519;&#12531;&#31649;&#29702;&#12484;&#12540;&#12523;&#12392;&#12375;&#12390;&#12391;&#12365;&#12427;&#12371;&#12392;&#12399;&#38480;&#23450;&#30340;&#12391;&#12377;&#12290;&#19968;&#26041;&#12391;&#12289;GitHub&#12392;&#12398;&#36899;&#25658;&#27231;&#33021;&#12434;&#25345;&#12387;&#12390;&#12362;&#12426;&#12289;&#36899;&#25658;&#12377;&#12427;&#12371;&#12392;&#12391;GitHub&#12395;&#12390;&#26412;&#26684;&#30340;&#12394;&#12467;&#12540;&#12489;&#12398;&#12496;&#12540;&#12472;&#12519;&#12531;&#31649;&#29702;&#12364;&#21487;&#33021;&#12395;&#12394;&#12427;&#12383;&#12417;&#12289;&#12481;&#12540;&#12512;&#12391;&#12527;&#12540;&#12463;&#12501;&#12525;&#12540;&#12434;&#31649;&#29702;&#12375;&#12383;&#12356;&#26041;&#12395;&#12392;&#12387;&#12390;&#12399;&#12458;&#12473;&#12473;&#12513;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p><p><a href=\"https:\/\/cloud.google.com\/dataform\/docs\/connect-repository?hl=ja#github\" target=\"_blank\" rel=\"noopener noreferrer\">Dataform&#20844;&#24335;&#12489;&#12461;&#12517;&#12513;&#12531;&#12488;<\/a>&#12434;&#21442;&#32771;&#12395;&#12289;&#20197;&#19979;&#12398;&#25163;&#38918;&#12391;&#36914;&#12417;&#12414;&#12375;&#12383;&#12290;<\/p><h4><span class=\"ez-toc-section\" id=\"%E2%91%A0GitHub%E3%81%AE%E8%A8%AD%E5%AE%9A\"><\/span>&#9312;GitHub&#12398;&#35373;&#23450;<span class=\"ez-toc-section-end\"><\/span><\/h4><ol>\n<li>GitHub&#12395;&#12450;&#12463;&#12475;&#12473;&#12375;&#12414;&#12377;&#12290;<\/li>\n<li>Dataform&#12398;&#12467;&#12540;&#12489;&#12434;&#21516;&#26399;&#12377;&#12427;&#12522;&#12509;&#12472;&#12488;&#12522;&#12364;&#12394;&#12356;&#22580;&#21512;&#12399;&#12289;&#26032;&#12383;&#12395;&#20316;&#25104;&#12375;&#12390;&#12362;&#12365;&#12414;&#12377;&#12290;<\/li>\n<li>&#12503;&#12525;&#12501;&#12451;&#12540;&#12523;&#12398; [Settings] &gt; [Developer's Settings] &gt; <a href=\"https:\/\/github.com\/settings\/personal-access-tokens\" target=\"_blank\" rel=\"noopener noreferrer\">[Fine-grained personal access tokens] &#12398;&#12479;&#12502;<\/a>&#12434;&#38283;&#12365;&#12414;&#12377;&#12290;<\/li>\n<li>[Generate new token] &#12508;&#12479;&#12531;&#12434;&#25276;&#12375;&#12289;[Token name] &#12392; [Expiration] &#12398;&#26085;&#25968;&#12434;&#36969;&#23452;&#35373;&#23450;&#12375;&#12414;&#12377;&#12290;&#32154;&#12356;&#12390;&#12289;[Repository access] &#12434; [Only selected repositories]&#12395;&#22793;&#26356;&#12375;&#12390;&#23550;&#35937;&#12392;&#12394;&#12427;&#12522;&#12509;&#12472;&#12488;&#12522;&#12434;&#36984;&#12403;&#12289;[Permissions] &#12395;&#12390;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#35373;&#23450;&#12375;&#12289;&#26368;&#24460;&#12395;&#19968;&#30058;&#19979;&#12398; [Generate token] &#12508;&#12479;&#12531;&#12434;&#25276;&#12375;&#12414;&#12377;&#12290;\n<ul>\n<li>[Contents] = [Read and write]<\/li>\n<li>[Metadata] = [Read-only]<\/li>\n<\/ul>\n<\/li>\n<li>token&#12364;&#29983;&#25104;&#12373;&#12428;&#12427;&#12398;&#12391;&#12289;&#20516;&#12434;&#12467;&#12500;&#12540;&#12375;&#12414;&#12377;&#12290;<\/li>\n<\/ol><h4><span class=\"ez-toc-section\" id=\"%E2%91%A1Secret_Manager%E3%81%AE%E8%A8%AD%E5%AE%9A\"><\/span>&#9313;Secret Manager&#12398;&#35373;&#23450;<span class=\"ez-toc-section-end\"><\/span><\/h4><ol>\n<li>Google Cloud&#12434;&#38283;&#12365;&#12414;&#12377;&#12290;<\/li>\n<li>&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12469;&#12540;&#12499;&#12473;&#12398;&#20013;&#12395;&#12354;&#12427;<a href=\"https:\/\/console.cloud.google.com\/security\/secret-manager\" target=\"_blank\" rel=\"noopener noreferrer\">Secret Manager<\/a>&#12395;&#12450;&#12463;&#12475;&#12473;&#12375;&#12414;&#12377;&#12290;&#12418;&#12375;&#21021;&#12417;&#12390;&#20351;&#12358;&#22580;&#21512;&#12399;&#12289;Secret Manager API&#12434;&#26377;&#21177;&#21270;&#12375;&#12414;&#12377;&#12290;<\/li>\n<li>[&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12434;&#20316;&#25104;] &#12508;&#12479;&#12531;&#12434;&#25276;&#12375;&#12289;[&#21517;&#21069;] &#12434;&#36969;&#23452;&#20837;&#21147;&#12398;&#12358;&#12360;&#12289;[&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12398;&#20516;] &#12395;&#9312;&#12391;&#12467;&#12500;&#12540;&#12375;&#12383;token&#12398;&#20516;&#12434;&#36028;&#12426;&#20184;&#12369;&#12414;&#12377;&#12290;&#26368;&#24460;&#12395;&#19968;&#30058;&#19979;&#12398; [&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12434;&#20316;&#25104;] &#12508;&#12479;&#12531;&#12434;&#25276;&#12375;&#12390;&#23436;&#20102;&#12391;&#12377;&#12290;<\/li>\n<\/ol><h4><span class=\"ez-toc-section\" id=\"%E2%91%A2IAM%E8%A8%AD%E5%AE%9A\"><\/span>&#9314;IAM&#35373;&#23450;<span class=\"ez-toc-section-end\"><\/span><\/h4><ol>\n<li>Dataform&#12391;&#21021;&#12417;&#12390;Secret Manager&#12434;&#21033;&#29992;&#12377;&#12427;&#22580;&#21512;&#12289;IAM&#12395;&#12390;&#27177;&#38480;&#20184;&#19982;&#12434;&#34892;&#12358;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;IAM&#12395;&#12450;&#12463;&#12475;&#12473;&#12375;&#12289;Dataform&#12398;&#12487;&#12501;&#12457;&#12523;&#12488;&#12469;&#12540;&#12499;&#12473;&#12450;&#12459;&#12454;&#12531;&#12488;&#12395; [Secret Manager &#12398;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12450;&#12463;&#12475;&#12469;&#12540;] &#12398;&#12525;&#12540;&#12523;&#12434;&#20184;&#19982;&#12375;&#12414;&#12377;&#12290;&#12394;&#12362;&#12289;&#12503;&#12522;&#12531;&#12471;&#12497;&#12523;&#12398;&#19968;&#35239;&#12395;&#12399; [Google &#25552;&#20379;&#12398;&#12525;&#12540;&#12523;&#20184;&#19982;&#12434;&#21547;&#12417;&#12427;] &#12395;&#12481;&#12455;&#12483;&#12463;&#12375;&#12383;&#12425;&#34920;&#31034;&#12373;&#12428;&#12427;&#28857;&#12395;&#12399;&#30041;&#24847;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;<\/li>\n<\/ol><h4><span class=\"ez-toc-section\" id=\"%E2%91%A3Dataform%E3%81%AE%E8%A8%AD%E5%AE%9A\"><\/span>&#9315;Dataform&#12398;&#35373;&#23450;<span class=\"ez-toc-section-end\"><\/span><\/h4><ol>\n<li><a href=\"https:\/\/console.cloud.google.com\/bigquery\/dataform\" target=\"_blank\" rel=\"noopener noreferrer\">Dataform<\/a>&#12434;&#38283;&#12365;&#12289;GitHub&#12395;&#12467;&#12540;&#12489;&#21516;&#26399;&#12375;&#12383;&#12356;&#12522;&#12509;&#12472;&#12488;&#12522;&#12434;&#38283;&#12365;&#12289;&#30011;&#38754;&#19978;&#12395;&#12354;&#12427; [Settings] &#12513;&#12491;&#12517;&#12540;&#12434;&#38283;&#12365;&#12414;&#12377;&#12290;<\/li>\n<li>&#30011;&#38754;&#19978;&#12395; [Git&#12392;&#25509;&#32154;] &#12508;&#12479;&#12531;&#12364;&#12354;&#12427;&#12398;&#12391;&#25276;&#12375;&#12414;&#12377;&#12290;<\/li>\n<li>[&#12522;&#12514;&#12540;&#12488; &#12522;&#12509;&#12472;&#12488;&#12522;&#12408;&#12398;&#12522;&#12531;&#12463;] &#12513;&#12491;&#12517;&#12540;&#12364;&#31435;&#12385;&#19978;&#12364;&#12427;&#12398;&#12391;&#12289;[&#12522;&#12514;&#12540;&#12488;&#12398;Git&#12522;&#12509;&#12472;&#12488;&#12522;&#12398;&#12503;&#12525;&#12488;&#12467;&#12523;] &#12434; [HTTPS] &#12395;&#35373;&#23450;&#12375;&#12289;[&#12522;&#12514;&#12540;&#12488;&#12398;Git&#12522;&#12509;&#12472;&#12488;&#12522;&#12398;URL] &#12392; [&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#12502;&#12521;&#12531;&#12481;&#21517;] &#12434;&#36969;&#23452;&#35373;&#23450;&#12375;&#12383;&#12358;&#12360;&#12391;&#12289;[&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;] &#12398;&#12503;&#12523;&#12480;&#12454;&#12531;&#12395;&#12390;&#9313;&#12391;&#20316;&#12387;&#12383;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12434;&#36984;&#25246;&#12375;&#12289;[&#12522;&#12531;&#12463;] &#12508;&#12479;&#12531;&#12434;&#25276;&#12377;&#12392;&#35373;&#23450;&#23436;&#20102;&#12391;&#12377;&#12290;<br>\n&#8251;URL&#12398;&#35373;&#23450;&#26178;&#12395;&#12300;&#36890;&#24120;&#12289;&#12522;&#12514;&#12540;&#12488;&#12398; git &#12398; URL &#12398;&#26411;&#23614;&#12399; .git &#12391;&#12377;&#12290;&#12301;&#12398;&#12424;&#12358;&#12394;&#12450;&#12521;&#12540;&#12488;&#12364;&#19978;&#12364;&#12426;&#12414;&#12377;&#12364;&#12289;GitHub&#12434;&#21033;&#29992;&#12377;&#12427;&#22580;&#21512;&#12399;&#33258;&#28982;&#12392; [https:\/\/github.com\/{user_name}\/{repository_name}] &#12398;&#12424;&#12358;&#12394;URL&#12395;&#12394;&#12427;&#12398;&#12391;&#27671;&#12395;&#12375;&#12394;&#12367;&#12390;&#12424;&#12356;&#12391;&#12377;&#12290;<\/li>\n<\/ol><h4><span class=\"ez-toc-section\" id=\"%E2%91%A4Dataform%E3%81%8B%E3%82%89Git%E3%81%ABPUSH%E3%81%99%E3%82%8B\"><\/span>&#9316;Dataform&#12363;&#12425;Git&#12395;PUSH&#12377;&#12427;<span class=\"ez-toc-section-end\"><\/span><\/h4><ol>\n<li><a href=\"https:\/\/console.cloud.google.com\/bigquery\/dataform\" target=\"_blank\" rel=\"noopener noreferrer\">Dataform<\/a>&#12398;&#38283;&#30330;&#12527;&#12540;&#12463;&#12473;&#12506;&#12540;&#12473;&#12434;&#38283;&#12365;&#12414;&#12377;&#12290;<\/li>\n<li>&#20013;&#22830;&#24038;&#12398;3&#28857;&#12513;&#12491;&#12517;&#12540;&#12434;&#25276;&#12377;&#12392;&#12289;[&#12522;&#12514;&#12540;&#12488;&#12502;&#12521;&#12531;&#12481;&#12395;push] &#12508;&#12479;&#12531;&#12364;&#34920;&#31034;&#12373;&#12428;&#12427;&#12398;&#12391;&#12289;&#12463;&#12522;&#12483;&#12463;&#12375;&#12414;&#12377;&#12290;&#12394;&#12362;&#12289;&#19979;&#35352;&#12398;&#30011;&#38754;&#12398;&#12424;&#12358;&#12395;&#12289;&#12487;&#12501;&#12457;&#12523;&#12488;&#12502;&#12521;&#12531;&#12481;&#12395;COMMIT&#12375;&#12390;&#12356;&#12394;&#12356;&#12467;&#12540;&#12489;&#12364;&#12354;&#12427;&#12392;&#12464;&#12524;&#12540;&#12450;&#12454;&#12488;&#12375;&#12390;&#25276;&#12379;&#12394;&#12356;&#12398;&#12391;&#12289;&#12375;&#12387;&#12363;&#12426;COMMIT&#12375;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<br>\n<a href=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-remote-repository-push.jpg\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17683\" src=\"https:\/\/takuminasuno.com\/wp-content\/uploads\/2025\/01\/dataform-remote-repository-push.jpg\" alt=\"\" width=\"2190\" height=\"1095\"><\/a><\/li>\n<\/ol><h4><span class=\"ez-toc-section\" id=\"%E2%91%A5%E3%81%9D%E3%81%97%E3%81%A6Git%E4%BD%9C%E6%A5%AD%E3%81%B8\"><\/span>&#9317;&#12381;&#12375;&#12390;Git&#20316;&#26989;&#12408;<span class=\"ez-toc-section-end\"><\/span><\/h4><ol>\n<li>&#12371;&#12428;&#12391;&#12522;&#12514;&#12540;&#12488;&#12522;&#12509;&#12472;&#12488;&#12522;&#12395;PUSH&#12391;&#12365;&#12427;&#12398;&#12391;&#12289;&#12373;&#12387;&#12381;&#12367;PUSH&#12375;&#12383;&#12425;GitHub&#12434;&#30906;&#35469;&#12375;&#12390;&#12415;&#12414;&#12377;&#12290;Dataform&#12398;&#38283;&#30330;&#12527;&#12540;&#12463;&#12473;&#12506;&#12540;&#12473;&#21517;&#12364;&#12381;&#12398;&#12414;&#12414;&#12502;&#12521;&#12531;&#12481;&#21517;&#12395;&#12394;&#12387;&#12390;PUSH&#12373;&#12428;&#12390;&#12356;&#12427;&#12398;&#12364;&#30906;&#35469;&#12391;&#12365;&#12414;&#12377;&#12290;<\/li>\n<li>&#12371;&#12428;&#12391;&#12289;&#12354;&#12392;&#12399;&#26222;&#27573;&#12398;Git&#12398;&#12424;&#12358;&#12395;&#21033;&#29992;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;<\/li>\n<\/ol><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#12371;&#12435;&#12395;&#12385;&#12399;&#12290;&#37027;&#38920;&#37326;&#25299;&#23455;&#12391;&#12377;&#1229 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17710,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[252],"tags":[],"class_list":["post-17674","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business_ja"],"_links":{"self":[{"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/posts\/17674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/comments?post=17674"}],"version-history":[{"count":27,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/posts\/17674\/revisions"}],"predecessor-version":[{"id":17720,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/posts\/17674\/revisions\/17720"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/media\/17710"}],"wp:attachment":[{"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/media?parent=17674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/categories?post=17674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/takuminasuno.com\/ja\/wp-json\/wp\/v2\/tags?post=17674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}