{"id":2446,"date":"2016-12-04T22:01:08","date_gmt":"2016-12-04T22:01:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2446"},"modified":"2023-11-22T14:37:02","modified_gmt":"2023-11-22T22:37:02","slug":"elt-processing-with-couchbase-and-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/elt-processing-with-couchbase-and-n1ql\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubc0f N1QL\uc744 \uc0ac\uc6a9\ud55c ELT \ucc98\ub9ac"},"content":{"rendered":"<p>\ub370\uc774\ud130 \uc18c\uc2a4 \uac04 \ub370\uc774\ud130 \uc774\ub3d9. \uc774\ub294 \ub370\uc774\ud130 \ud1b5\ud569 \ud504\ub85c\uc81d\ud2b8\uc758 \ud575\uc2ec \ud65c\ub3d9 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc804\ud1b5\uc801\uc73c\ub85c \ub370\uc774\ud130 \uc774\ub3d9\uacfc \uad00\ub828\ub41c \uae30\ubc95\uc740 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/database-vs-data-warehouse\/\">\ub370\uc774\ud130 \uc6e8\uc5b4\ud558\uc6b0\uc2a4<\/a>, BI \ubc0f \ubd84\uc11d. \ucd5c\uadfc\uc5d0\ub294 \ube45 \ub370\uc774\ud130, \ub370\uc774\ud130 \ub808\uc774\ud06c, \ud558\ub461\uc774 \uc774 \ubd84\uc57c\uc5d0\uc11c \uc790\uc8fc \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud56d\ubaa9\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \uc885\ub958\uc758 \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c \ub370\uc774\ud130\ub97c \ub300\uaddc\ubaa8\ub85c \uc870\uc791\ud558\uae30 \uc704\ud574 Couchbase N1QL \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800, \ub370\uc774\ud130 \uc774\ub3d9\uc744 \uc218\ud589\ud560 \ub54c \ub450 \uac00\uc9c0 \uace0\uc804\uc801\uc778 \uc811\uadfc \ubc29\uc2dd\uc744 \uae30\uc5b5\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<p><strong>ETL<\/strong> (\ucd94\ucd9c-\ubcc0\ud658-\ub85c\ub4dc). \uc774 \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uba74 \ub370\uc774\ud130\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <strong>\ucd94\ucd9c<\/strong> (\uc6d0\ubcf8 \ub370\uc774\ud130 \uc18c\uc2a4\uc5d0\uc11c \uac00\uc838\uc634), <strong>\ubcc0\ud615<\/strong> (\ub370\uc774\ud130\uac00 \ub300\uc0c1 \uc2dc\uc2a4\ud15c\uc5d0 \ub9de\uac8c \ub2e4\uc2dc \ud3ec\ub9f7\ub428) \ubc0f <strong>\ub85c\ub4dc<\/strong> (\ub300\uc0c1 \ub370\uc774\ud130 \uc800\uc7a5\uc18c\uc5d0\uc11c).<\/p>\n<p><strong>ELT<\/strong> (\ucd94\ucd9c-\ub85c\ub4dc-\ubcc0\ud658). \uc774 \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uba74 \ub370\uc774\ud130\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <strong>\ucd94\ucd9c<\/strong> (\uc6d0\ubcf8 \ub370\uc774\ud130 \uc18c\uc2a4\uc5d0\uc11c \uac00\uc838\uc634), <strong>\ub85c\ub4dc<\/strong> \ub97c \ub300\uc0c1 \uc2dc\uc2a4\ud15c\uc5d0 \ub3d9\uc77c\ud55c \ud615\uc2dd\uc73c\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c <strong>\ubcc0\ud658<\/strong> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc6d0\ud558\ub294 \ub370\uc774\ud130 \ud615\uc2dd\uc744 \uc5bb\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc6b0\ub9ac\ub294 \ub2e4\uc74c \uc0ac\ud56d\uc5d0 \uc9d1\uc911\ud560 \uac83\uc785\ub2c8\ub2e4. <strong>ELT<\/strong> \uc5f0\uc2b5\uc744 \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uac04\ub2e8\ud55c \ub0b4\ubcf4\ub0b4\uae30\ub97c \uc218\ud589\ud558\uace0 \ub370\uc774\ud130\ub97c Couchbase\uc5d0 \ub85c\ub4dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc785\ub825 \ub370\uc774\ud130 \uc18c\uc2a4\ub85c\ub294 \uc778\uc0ac \ubd80\uc11c\ub97c \ubaa8\ub378\ub9c1\ud558\ub294 \uace0\uc804\uc801\uc778 HR \uc2a4\ud0a4\ub9c8 \uc608\uc81c\uac00 \ub0b4\uc7a5\ub41c Oracle \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uac83\uc774 \uc18c\uc2a4 \ub370\uc774\ud130 \ubaa8\ub378\uc785\ub2c8\ub2e4:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/elt-processing-with-couchbase-and-n1ql\/model_1.jpg\" \/><\/p>\n<p>\uccab \ubc88\uc9f8 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ub3d9\uc77c\ud55c \uad6c\uc870\ub85c \ub370\uc774\ud130\ub97c \ub85c\ub4dc\ud569\ub2c8\ub2e4. \uc774 \ucd08\uae30 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc218\ud589\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb34\ub8cc \ub3c4\uad6c\uac00 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/mahurtado\/oracle2couchbase\">\uc5ec\uae30<\/a>. \ub9c8\uc9c0\ub9c9\uc5d0\ub294 \uc774 \ud14c\uc774\ube14 \ubaa8\ub378\uc744 \ub9e4\ud551\ud558\ub294 JSON \ubb38\uc11c\uac00 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/elt-processing-with-couchbase-and-n1ql\/model_2.jpg\" \/><\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4 \uc704\uce58 \ubb38\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/p>\n<pre><code>{\r\n  \"street_address\": \"2017 Shinjuku-ku\",\r\n  \"city\": \"Tokyo\",\r\n  \"state_province\": \"Tokyo Prefecture\",\r\n  \"postal_code\": \"1689\",\r\n  \"type\": \"locations\",\r\n  \"location_id\": 1200,\r\n  \"country_id\": \"JP\"\r\n}\r\n<\/code><\/pre>\n<p>\uc774\uac83\uc740 \uc26c\uc6b4 \uccab \ub2e8\uacc4\uc600\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub7ec\ud55c \ud14c\uc774\ube14\uacfc \ubb38\uc11c \uac04\uc758 \ub9e4\ud551\uc740 NoSQL \uc138\uacc4\uc5d0\uc11c\ub294 \uc885\uc885 \uc798\ubabb\ub41c \uc124\uacc4\uc785\ub2c8\ub2e4. NoSQL\uc5d0\uc11c\ub294 \ucc38\uc870\ub41c \ub370\uc774\ud130\ub97c \ud3ec\ud568\ud558\ub294 \ubcf4\ub2e4 \uc9c1\uc811\uc801\uc778 \uc561\uc138\uc2a4 \uacbd\ub85c\ub97c \uc704\ud574 \ub370\uc774\ud130\uc758 \uc815\uaddc\ud654\ub97c \ud574\uc81c\ud558\ub294 \uacbd\uc6b0\uac00 \ube48\ubc88\ud569\ub2c8\ub2e4. \ubaa9\ud45c\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc0c1\ud638 \uc791\uc6a9\uacfc \uc870\uc778\uc744 \ucd5c\uc18c\ud654\ud558\uc5ec \ucd5c\uc0c1\uc758 \uc131\ub2a5\uc744 \ucc3e\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc9c1\uc6d0\uc758 \uc804\uccb4 \uc791\uc5c5 \uae30\ub85d\uc5d0 \uc790\uc8fc \uc561\uc138\uc2a4\ud574\uc57c \ud558\ub294 \uc0ac\uc6a9 \uc0ac\ub840\uac00 \uc788\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub514\uc790\uc778\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcc0\uacbd\ud558\uae30\ub85c \uacb0\uc815\ud569\ub2c8\ub2e4:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/elt-processing-with-couchbase-and-n1ql\/model_3.jpg\" \/><\/p>\n<p>\uc704\uce58\uc758 \uacbd\uc6b0, \uad6d\uac00 \ubc0f \uc9c0\uc5ed\uc5d0 \ub300\ud55c \ucc38\uc870 \ub370\uc774\ud130\ub97c \ub2e8\uc77c \uc704\uce58 \ubb38\uc11c\uc5d0 \uc870\uc778\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc9c1\uc6d0 \ubb38\uc11c\uc758 \uacbd\uc6b0 \ubd80\uc11c \ub370\uc774\ud130\ub97c \ud3ec\ud568\ud558\uace0 \uc804\uccb4 \uc5c5\ubb34 \uae30\ub85d \ub610\ub294 \uac01 \uc9c1\uc6d0\uc774 \ud3ec\ud568\ub41c \ubc30\uc5f4\uc744 \ud3ec\ud568\ud560 \uac83\uc785\ub2c8\ub2e4. JSON\uc758 \uc774\ub7ec\ud55c \ubc30\uc5f4 \uc9c0\uc6d0\uc740 \uad00\uacc4\ud615 \uc138\uacc4\uc5d0\uc11c \uc678\ub798 \ud0a4 \ucc38\uc870 \ubc0f \uc870\uc778\uc5d0 \ube44\ud574 \ud06c\uac8c \uac1c\uc120\ub41c \uae30\ub2a5\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc791\uc5c5 \ubb38\uc11c\uc758 \uacbd\uc6b0 \uc6d0\ub798 \ud14c\uc774\ube14 \uad6c\uc870\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub798\uc11c \uc6b0\ub9ac\ub294 <strong>\ucd94\ucd9c<\/strong> \uadf8\ub9ac\uace0 <strong>\ub85c\ub4dc<\/strong> \uc774\uc81c \uc6b0\ub9ac\ub294 <strong>\ubcc0\ud658<\/strong> \uc774 \ubaa8\ub378\uc744 \uc644\uc131\ud558\uae30 \uc704\ud574 <strong>ELT<\/strong> \uc608\uc81c. \uc774 \uc791\uc5c5\uc744 \uc5b4\ub5bb\uac8c \ud560 \uc218 \uc788\uc744\uae4c\uc694? N1QL\uc744 \uc0ac\uc6a9\ud560 \ub54c\uc785\ub2c8\ub2e4.<\/p>\n<p>N1QL\uc740 \ub370\uc774\ud130 \uc561\uc138\uc2a4 \ubc0f \ub370\uc774\ud130 \uc870\uc791\uc744 \uc704\ud574 Couchbase\uc5d0 \ud3ec\ud568\ub41c SQL\uacfc \uc720\uc0ac\ud55c \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc774 \uc608\uc5d0\uc11c\ub294 \ub450 \uac1c\uc758 \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4: \uc6d0\ub798 Oracle HR \uc2a4\ud0a4\ub9c8\uc5d0 \ub9e4\ud551\ub418\ub294 HR\uacfc \ub300\uc0c1 \ubb38\uc11c \ubaa8\ub378\uc744 \ubcf4\uc720\ud560 HR_DNORM\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\ubbf8 HR \uc2a4\ud0a4\ub9c8\ub97c \ub85c\ub4dc\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ub2e8\uacc4\ub294 HR_DNORM\uc774\ub77c\ub294 \ubc84\ud0b7\uc744 \ub9cc\ub4dc\ub294 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \uc774 \uc0c8 \ubc84\ud0b7\uc5d0 \uae30\ubcf8 \uc778\ub371\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>CREATE PRIMARY INDEX ON HR_DNORM<\/code><\/pre>\n<p>\uc774\uc81c \uc704\uce58 \ubb38\uc11c\ub97c \ub9cc\ub4e4 \ucc28\ub840\uc785\ub2c8\ub2e4. \uc774 \ubb38\uc11c\ub294 \uc6d0\ubcf8 \uc704\uce58, \uad6d\uac00 \ubc0f \uc9c0\uc5ed \ubb38\uc11c\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value _v) \r\nSELECT meta().id _k,\r\n{\r\n   \"type\":\"location\",\r\n   \"city\":loc.city,\r\n   \"postal_code\":loc.postal_code, \r\n   \"state_province\":IFNULL(loc.state_province, null), \r\n   \"street_address\":loc.street_address, \r\n   \"country_name\":ct.country_name, \r\n   \"region_name\":rg.region_name\r\n } as _v\r\nFROM HR loc\r\nJOIN HR ct ON KEYS \"countries::\" || loc.country_id\r\nJOIN HR rg ON KEYS \"regions::\" || TO_STRING(ct.region_id)\r\nWHERE loc.type=\"locations\"<\/code><\/pre>\n<p>\uba87 \uac00\uc9c0 \uc8fc\ubaa9\ud574\uc57c \ud560 \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li>\uc5ec\uae30\uc11c\ub294 \uc0bd\uc785\uc744 \uc704\ud574 SELECT \ubb38\uc758 \ud22c\uc601\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc81c\uc5d0\uc11c \uc6d0\ubcf8 \ub370\uc774\ud130\ub294 \ub2e4\ub978 \ubc84\ud0b7\uc5d0\uc11c \uac00\uc838\uc628 \uac83\uc785\ub2c8\ub2e4.<\/li>\n<li>JOIN\uc740 \uc6d0\ub798 \ubc84\ud0b7\uc5d0\uc11c \uad6d\uac00 \ubc0f \uc9c0\uc5ed\uc744 \ucc38\uc870\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<li>state_province \ud544\ub4dc\uc5d0 \uba85\uc2dc\uc801\uc73c\ub85c null \uac12\uc744 \uc124\uc815\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 IFNULL \ud568\uc218<\/li>\n<li>\ud0a4 \ucc38\uc870\ub97c \uc704\ud574 \uc22b\uc790 \ud544\ub4dc\uc5d0 \uc801\uc6a9\ub41c TO_STRING \ud568\uc218<\/li>\n<\/ul>\n<p>\uc6d0\ubcf8 \uc0d8\ud50c\uc740 \uc774\ub807\uac8c \ub429\ub2c8\ub2e4:<\/p>\n<pre><code>{\r\n  \"city\": \"Tokyo\",\r\n  \"country_name\": \"Japan\",\r\n  \"postal_code\": \"1689\",\r\n  \"region_name\": \"Asia\",\r\n  \"state_province\": \"Tokyo Prefecture\",\r\n  \"street_address\": \"2017 Shinjuku-ku\",\r\n  \"type\": \"location\"\r\n}<\/code><\/pre>\n<p>\ucc38\uc870 \uc704\uce58_id \ubc0f \uad6d\uac00_id\ub97c \uc81c\uac70\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uc9c1\uc6d0 \ubb38\uc11c\ub97c \uc791\uc131\ud560 \ucc28\ub840\uc785\ub2c8\ub2e4. \uc5ec\ub7ec \ub2e8\uacc4\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uccab \ubc88\uc9f8\ub294 \ubd80\uc11c \ubc0f \uc2e4\uc81c \uc9c1\ubb34 \uc815\ubcf4\ub97c \ud3ec\ud568\ud558\uc5ec \uc6d0\ub798 HR \ubc84\ud0b7\uc5d0\uc11c \uc9c1\uc6d0\uc744 \ub9cc\ub4dc\ub294 \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value _v) \r\nSELECT meta().id _k,\r\n{\r\n   \"type\":\"employees\",\r\n   \"employee_id\": emp. employee_id,\r\n   \"first_name\": emp.first_name,\r\n   \"last_name\": emp.last_name,\r\n   \"phone_number\": emp.phone_number,\r\n   \"email\": emp.email,\r\n   \"hire_date\": emp.hire_date,\r\n   \"salary\": emp.salary,\r\n   \"commission_pct\": IFNULL(emp.commission_pct, null),\r\n   \"manager_id\": IFNULL(emp.manager_id, null),\r\n   \"job_id\": emp.job_id,\r\n   \"job_title\": job.job_title,\r\n   \"department\" : \r\n   {\r\n      \"name\" : dpt.department_name,\r\n      \"manager_id\" : dpt.manager_id,\r\n      \"department_id\" : dpt.department_id\r\n   }  \r\n } as _v\r\nFROM HR emp\r\nJOIN HR job ON KEYS \"jobs::\" || emp.job_id \r\nJOIN HR dpt ON KEYS \"departments::\" || TO_STRING(emp.department_id) \r\nWHERE emp.type=\"employees\" RETURNING META().id;<\/code><\/pre>\n<p>\ub458\uc9f8, \uc784\uc2dc \uad6c\uc870\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc791\uc5c5 \uae30\ub85d \ubc30\uc5f4\uc744 \uad6c\ucd95\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value job_history) \r\nSELECT \"job_history::\" || TO_STRING(jobh.employee_id) AS _k, \r\n{\r\n\"jobs\" : ARRAY_AGG(\r\n   {\r\n      \"start_date\": jobh.start_date,\r\n      \"end_date\": jobh.end_date,\r\n      \"job_id\": jobh.job_id,\r\n      \"department_id\": jobh.department_id\r\n   } \r\n)\r\n} AS job_history\r\nFROM HR jobh\r\nWHERE jobh.type=\"job_history\"\r\nGROUP BY jobh.employee_id\r\nRETURNING META().id;<\/code><\/pre>\n<p>\uc774\uc81c job_history \ubc30\uc5f4\uc744 \ucd94\uac00\ud558\uc5ec \uc9c1\uc6d0 \ubb38\uc11c\ub97c \uc27d\uac8c \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>UPDATE HR_DNORM emp\r\nSET job_history=(\r\n   SELECT RAW jobs\r\n   FROM HR_DNORM jobh\r\n   USE KEYS \"job_history::\" || SUBSTR(meta(emp).id, 11)\r\n)[0]\r\nWHERE \r\nemp.type=\"employees\"\r\nRETURNING meta().id<\/code><\/pre>\n<p>\uc9c1\uc6d0 \ubb38\uc11c\ub294 \uc774\ub807\uac8c \uc0dd\uacbc\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>{\r\n  \"commission_pct\": null,\r\n  \"department\": {\r\n    \"department_id\": 10,\r\n    \"manager_id\": 200,\r\n    \"name\": \"Administration\"\r\n  },\r\n  \"email\": \"JWHALEN\",\r\n  \"employee_id\": 200,\r\n  \"first_name\": \"Jennifer\",\r\n  \"hire_date\": \"2003-09-16T22:00:00Z\",\r\n  \"job_history\": [\r\n    {\r\n      \"department_id\": 80,\r\n      \"end_date\": \"2007-12-31T23:00:00Z\",\r\n      \"job_id\": \"SA_REP\",\r\n      \"start_date\": \"2006-12-31T23:00:00Z\"\r\n    },\r\n    {\r\n      \"department_id\": 90,\r\n      \"end_date\": \"2001-06-16T22:00:00Z\",\r\n      \"job_id\": \"AD_ASST\",\r\n      \"start_date\": \"1995-09-16T22:00:00Z\"\r\n    },\r\n    {\r\n      \"department_id\": 90,\r\n      \"end_date\": \"2006-12-30T23:00:00Z\",\r\n      \"job_id\": \"AC_ACCOUNT\",\r\n      \"start_date\": \"2002-06-30T22:00:00Z\"\r\n    }\r\n  ],\r\n  \"job_id\": \"AD_ASST\",\r\n  \"job_title\": \"Administration Assistant\",\r\n  \"last_name\": \"Whalen\",\r\n  \"manager_id\": 101,\r\n  \"phone_number\": \"515.123.4444\",\r\n  \"salary\": 4400,\r\n  \"type\": \"employees\"\r\n}<\/code><\/pre>\n<p>\uc774\uc804 \uc9c1\ucc45\uc758 job_history \ubc30\uc5f4\uc5d0 \uc8fc\ubaa9\ud558\uc138\uc694.<\/p>\n<p>\uc774\uc81c \uc784\uc2dc job_history \ubb38\uc11c\ub97c \uc0ad\uc81c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre><code>DELETE FROM HR_DNORM emp\r\nWHERE meta().id LIKE \"job_history::%\"<\/code><\/pre>\n<p>\ub9c8\uc9c0\ub9c9 \ub2e8\uacc4\ub85c \uc6d0\ubcf8 \uc791\uc5c5 \ubb38\uc11c\ub97c \uc0bd\uc785\ud569\ub2c8\ub2e4:<\/p>\n<pre><code>INSERT INTO HR_DNORM (key _k, value _v) \r\nSELECT meta().id _k, _v\r\nFROM HR _v\r\nWHERE _v.type=\"jobs\"<\/code><\/pre>\n<p>\ub05d\ub0ac\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc740 \uac04\ub2e8\ud55c \uc608\uc774\uc9c0\ub9cc N1QL \ub370\uc774\ud130 \uc870\uc791\uc774 \uac15\ub825\ud560 \uc218 \uc788\uc74c\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. \ud589\ubcf5\ud55c \ub370\uc774\ud130 \ub9c8\uc774\uadf8\ub808\uc774\uc158!<\/p>","protected":false},"excerpt":{"rendered":"<p>Moving data between data sources. This is one of the key activities in data integration projects. Traditionally, techniques around data movement has been part of Data Warehouse, BI and analytics. More recently Big Data, Data Lakes, Hadoop, are frequent players [&hellip;]<\/p>","protected":false},"author":69,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819],"tags":[1766,1383],"ppma_author":[9041],"class_list":["post-2446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","tag-data-migration","tag-etl"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ELT processing with Couchbase and N1QL - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/elt-processing-with-couchbase-and-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ELT processing with Couchbase and N1QL\" \/>\n<meta property=\"og:description\" content=\"Moving data between data sources. This is one of the key activities in data integration projects. Traditionally, techniques around data movement has been part of Data Warehouse, BI and analytics. More recently Big Data, Data Lakes, Hadoop, are frequent players [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/elt-processing-with-couchbase-and-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-04T22:01:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-22T22:37:02+00:00\" \/>\n<meta name=\"author\" content=\"Manuel Hurtado, Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manuel Hurtado, Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\"},\"author\":{\"name\":\"Manuel Hurtado, Solutions Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237\"},\"headline\":\"ELT processing with Couchbase and N1QL\",\"datePublished\":\"2016-12-04T22:01:08+00:00\",\"dateModified\":\"2023-11-22T22:37:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\"},\"wordCount\":731,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Data Migration\",\"ETL\"],\"articleSection\":[\"Couchbase Server\",\"Data Modeling\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\",\"name\":\"ELT processing with Couchbase and N1QL - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-12-04T22:01:08+00:00\",\"dateModified\":\"2023-11-22T22:37:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ELT processing with Couchbase and N1QL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237\",\"name\":\"Manuel Hurtado, Solutions Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d792e93660734cc10c1f8a5bbc2cf29a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g\",\"caption\":\"Manuel Hurtado, Solutions Engineer, Couchbase\"},\"description\":\"Manuel is a Couchbase Solutions Engineer, with more than 15 years of experience helping companies to architect their systems, as developer, consultant, trainer and project manager. Happy to learn from the field how people use technology to success.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/manuel-hurtado\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ELT processing with Couchbase and N1QL - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/elt-processing-with-couchbase-and-n1ql\/","og_locale":"ko_KR","og_type":"article","og_title":"ELT processing with Couchbase and N1QL","og_description":"Moving data between data sources. This is one of the key activities in data integration projects. Traditionally, techniques around data movement has been part of Data Warehouse, BI and analytics. More recently Big Data, Data Lakes, Hadoop, are frequent players [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/elt-processing-with-couchbase-and-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-12-04T22:01:08+00:00","article_modified_time":"2023-11-22T22:37:02+00:00","author":"Manuel Hurtado, Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Manuel Hurtado, Solutions Engineer, Couchbase","Est. reading time":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/"},"author":{"name":"Manuel Hurtado, Solutions Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237"},"headline":"ELT processing with Couchbase and N1QL","datePublished":"2016-12-04T22:01:08+00:00","dateModified":"2023-11-22T22:37:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/"},"wordCount":731,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Data Migration","ETL"],"articleSection":["Couchbase Server","Data Modeling"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/","name":"ELT processing with Couchbase and N1QL - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-12-04T22:01:08+00:00","dateModified":"2023-11-22T22:37:02+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/elt-processing-with-couchbase-and-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ELT processing with Couchbase and N1QL"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/00c164bc72955b52cd86c966aafb9237","name":"\ub9c8\ub204\uc5d8 \ud6c4\ub974\ud0c0\ub3c4, \uc194\ub8e8\uc158 \uc5d4\uc9c0\ub2c8\uc5b4, \uce74\uc6b0\uce58\ubca0\uc774\uc2a4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d792e93660734cc10c1f8a5bbc2cf29a","url":"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g","caption":"Manuel Hurtado, Solutions Engineer, Couchbase"},"description":"Manuel\uc740 \uac1c\ubc1c\uc790, \ucee8\uc124\ud134\ud2b8, \ud2b8\ub808\uc774\ub108, \ud504\ub85c\uc81d\ud2b8 \ub9e4\ub2c8\uc800\ub85c\uc11c 15\ub144 \uc774\uc0c1 \uae30\uc5c5\uc758 \uc2dc\uc2a4\ud15c \uc124\uacc4\ub97c \uc9c0\uc6d0\ud55c \uacbd\ub825\uc774 \uc788\ub294 Couchbase \uc194\ub8e8\uc158 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. \uc0ac\ub78c\ub4e4\uc774 \uae30\uc220\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc131\uacf5\ud558\ub294 \ubc29\ubc95\uc744 \ud604\uc7a5\uc5d0\uc11c \ubc30\uc6b0\uac8c \ub418\uc5b4 \uae30\uc069\ub2c8\ub2e4.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/manuel-hurtado\/"}]}},"authors":[{"term_id":9041,"user_id":69,"is_guest":0,"slug":"manuel-hurtado","display_name":"Manuel Hurtado, Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/e8eced6ee14aeefdf82ebfb694cfa145280c2e206f819d892eb82d5fef8a6a25?s=96&d=mm&r=g","first_name":"Manuel","last_name":"Hurtado","user_url":"","author_category":"","description":"Manuel\uc740 \uac1c\ubc1c\uc790, \ucee8\uc124\ud134\ud2b8, \ud2b8\ub808\uc774\ub108, \ud504\ub85c\uc81d\ud2b8 \ub9e4\ub2c8\uc800\ub85c\uc11c 15\ub144 \uc774\uc0c1 \uae30\uc5c5\uc758 \uc2dc\uc2a4\ud15c \uc124\uacc4\ub97c \uc9c0\uc6d0\ud55c \uacbd\ub825\uc774 \uc788\ub294 Couchbase \uc194\ub8e8\uc158 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. \uc0ac\ub78c\ub4e4\uc774 \uae30\uc220\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc131\uacf5\ud558\ub294 \ubc29\ubc95\uc744 \ud604\uc7a5\uc5d0\uc11c \ubc30\uc6b0\uac8c \ub418\uc5b4 \uae30\uc069\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/69"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=2446"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2446\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=2446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2446"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}