{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,12,30]],"date-time":"2025-12-30T23:47:24Z","timestamp":1767138444218,"version":"build-2238731810"},"publisher-location":"Berlin, Heidelberg","reference-count":61,"publisher":"Springer Berlin Heidelberg","isbn-type":[{"value":"9783662635186","type":"print"},{"value":"9783662635193","type":"electronic"}],"license":[{"start":{"date-parts":[[2021,1,1]],"date-time":"2021-01-01T00:00:00Z","timestamp":1609459200000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2021,5,18]],"date-time":"2021-05-18T00:00:00Z","timestamp":1621296000000},"content-version":"vor","delay-in-days":137,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2021]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>Extract-Transform-Load (ETL) flows are used to extract data, transform it, and load it into data warehouses (DWs). The dominating ETL tools use graphical user interfaces (GUIs) where users must manually place steps\/components on a canvas and manually connect them using lines. This provides an easy to understand overview of the ETL flow but can also be rather tedious and require much trivial work for simple things. We, therefore, challenge this approach and propose to develop ETL flows by writing code. To make the programming easy, we proposed the Python-based ETL framework  in 2009. We have extended  significantly since the original release, and in this paper, we present an up-to-date overview of the framework.  offers commonly used functionality for programmatic ETL development and enables the user to efficiently create effective ETL flows with the full power of programming. Each dimension is represented by a dimension object that manages the underlying table or tables in the case of a snowflaked dimension. Thus, filling a slowly changing or snowflaked dimension only requires a single method call per row as  performs all of the required lookups, insertions, and assignment of surrogate keys. Similarly to dimensions, fact tables are each represented by a fact table object. Our latest addition to , Drawn Table Testing (DTT), simplifies testing ETL flows by making it easy to define both preconditions (i.e., the state of the database before the ETL flow is run) and postconditions (i.e., the expected state after the ETL flow has run) into a test. DTT can also be used to test ETL flows created in other ETL tools.  also provides a set of commonly used functions for transforming rows, classes that help users parallelize their ETL flows using simple abstractions, and editor support for working with DTT. We present an evaluation that shows that  provides high programmer productivity and that the created ETL flows have good run-time performance. Last, we present a case study from a company using  in production and consider some of the lessons we learned during the development of  as an open source framework.<\/jats:p>","DOI":"10.1007\/978-3-662-63519-3_3","type":"book-chapter","created":{"date-parts":[[2021,5,17]],"date-time":"2021-05-17T07:03:01Z","timestamp":1621234981000},"page":"45-84","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":0,"title":["pygrametl: A Powerful Programming Framework for Easy Creation and Testing of ETL Flows"],"prefix":"10.1007","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-1184-1000","authenticated-orcid":false,"given":"S\u00f8ren Kejser","family":"Jensen","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-0862-0509","authenticated-orcid":false,"given":"Christian","family":"Thomsen","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1615-777X","authenticated-orcid":false,"given":"Torben Bach","family":"Pedersen","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-7981-4565","authenticated-orcid":false,"given":"Ove","family":"Andersen","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2021,5,18]]},"reference":[{"issue":"6","key":"3_CR1","doi-asserted-by":"publisher","first-page":"777","DOI":"10.1007\/s00778-017-0477-2","volume":"26","author":"SMF Ali","year":"2017","unstructured":"Ali, S.M.F., Wrembel, R.: From conceptual design to performance optimization of ETL workflows: current state of research and open problems. VLDB J. (VLDBJ) 26(6), 777\u2013801 (2017). https:\/\/doi.org\/10.1007\/s00778-017-0477-2","journal-title":"VLDB J. (VLDBJ)"},{"key":"3_CR2","unstructured":"Andersen, O., Thomsen, C., Torp, K.: SimpleETL: ETL processing by simple specifications. In: 20th International Workshop on Design, Optimization, Languages and Analytical Processing of Big Data (DOLAP). CEUR-WS.org (2018)"},{"key":"3_CR3","first-page":"194","volume-title":"Test Driven Development: By Example","author":"K Beck","year":"2002","unstructured":"Beck, K.: Test Driven Development: By Example, pp. 194\u2013195. Addison-Wesley Professional, Boston (2002)"},{"key":"3_CR4","unstructured":"Beyer, M.A., Thoo, E., Selvage, M.Y., Zaidi, E.: Gartner magic quadrant for data integration tools (2020)"},{"issue":"2","key":"3_CR5","doi-asserted-by":"publisher","first-page":"217","DOI":"10.1007\/s41870-017-0067-y","volume":"10","author":"P Chandra","year":"2018","unstructured":"Chandra, P., Gupta, M.K.: Comprehensive survey on data warehousing research. Int. J. Inf. Technol. (IJIT) 10(2), 217\u2013224 (2018). https:\/\/doi.org\/10.1007\/s41870-017-0067-y","journal-title":"Int. J. Inf. Technol. (IJIT)"},{"key":"3_CR6","unstructured":"Dean, J., Ghemawat, S.: MapReduce: simplified data processing on large clusters. In: 6th Operating Systems Design and Implementation (OSDI), pp. 137\u2013150. USENIX (2004)"},{"key":"3_CR7","unstructured":"DiCyPS - Center for Data-Intensive Cyber-Physical Systems. https:\/\/www.dicyps.dk\/dicyps-in-english\/. Accessed 10 Feb 2021"},{"key":"3_CR8","unstructured":"Django. https:\/\/djangoproject.com\/. Accessed 10 Feb 2021"},{"key":"3_CR9","doi-asserted-by":"publisher","unstructured":"ElGamal, N.: Data warehouse test routine descriptions. Technical report, Cairo University (2016). https:\/\/doi.org\/10.13140\/RG.2.1.3755.5282","DOI":"10.13140\/RG.2.1.3755.5282"},{"key":"3_CR10","doi-asserted-by":"publisher","unstructured":"ElGamal, N., El Bastawissy, A., Galal-Edeen, G.: Towards a data warehouse testing framework. In: 2011 Ninth International Conference on ICT and Knowledge Engineering (ICT&KE), pp. 65\u201371. IEEE (2012). https:\/\/doi.org\/10.1109\/ICTKE.2012.6152416","DOI":"10.1109\/ICTKE.2012.6152416"},{"key":"3_CR11","unstructured":"ElGamal, N., El-Bastawissy, A., Galal-Edeen, G.H.: An architecture-oriented data warehouse testing approach. In: 21st International Conference on Management of Data (COMAD), pp. 24\u201334. CSI (2016)"},{"key":"3_CR12","unstructured":"GitHub Flavored Markdown Spec - Version 0.29-gfm, 06 April 2019. https:\/\/github.github.com\/gfm\/#tables-extension-. Accessed 10 Feb 2021"},{"key":"3_CR13","doi-asserted-by":"publisher","unstructured":"Golfarelli, M., Rizzi, S.: A comprehensive approach to data warehouse testing. In: 12th International Workshop on Data Warehousing and OLAP (DOLAP), pp. 17\u201324. ACM (2009). https:\/\/doi.org\/10.1145\/1651291.1651295","DOI":"10.1145\/1651291.1651295"},{"issue":"2","key":"3_CR14","doi-asserted-by":"publisher","first-page":"26","DOI":"10.4018\/jdwm.2011040102","volume":"7","author":"M Golfarelli","year":"2011","unstructured":"Golfarelli, M., Rizzi, S.: Data warehouse testing. Int. J. Data Warehous. Min. (IJDWM) 7(2), 26\u201343 (2011). https:\/\/doi.org\/10.4018\/jdwm.2011040102","journal-title":"Int. J. Data Warehous. Min. (IJDWM)"},{"issue":"11","key":"3_CR15","doi-asserted-by":"publisher","first-page":"1183","DOI":"10.1016\/j.infsof.2011.04.002","volume":"53","author":"M Golfarelli","year":"2011","unstructured":"Golfarelli, M., Rizzi, S.: Data warehouse testing: a prototype-based methodology. Inf. Softw. Technol. (IST) 53(11), 1183\u20131198 (2011). https:\/\/doi.org\/10.1016\/j.infsof.2011.04.002","journal-title":"Inf. Softw. Technol. (IST)"},{"key":"3_CR16","unstructured":"Gr\u00f6nniger, H., Krahn, H., Rumpe, B., Schindler, M., V\u00f6lkel, S.S.: Text-based modeling. In: 4th International Workshop on Language Engineering (ATEM) (2007)"},{"key":"3_CR17","unstructured":"Guduric, P.: SQL server - unit and integration testing of SSIS packages. MSDN Mag.: Microsoft J. Dev. 28(8), 48\u201356 (2013). http:\/\/download.microsoft.com\/download\/a\/3\/1\/a315bac2-8093-45fd-8d04-1a9f899aca53\/mdn_0813dg.pdf"},{"key":"3_CR18","doi-asserted-by":"publisher","unstructured":"Homayouni, H., Ghosh, S., Ray, I.: An approach for testing the extract-transform-load process in data warehouse systems. In: 22nd International Database Engineering & Applications Symposium (IDEAS), pp. 236\u2013245. ACM (2018). https:\/\/doi.org\/10.1145\/3216122.3216149","DOI":"10.1145\/3216122.3216149"},{"key":"3_CR19","doi-asserted-by":"publisher","first-page":"223","DOI":"10.1016\/bs.adcom.2017.12.005","volume":"112","author":"H Homayouni","year":"2019","unstructured":"Homayouni, H., Ghosh, S., Ray, I.: Data warehouse testing. Adv. Comput. 112, 223\u2013273 (2019). https:\/\/doi.org\/10.1016\/bs.adcom.2017.12.005","journal-title":"Adv. Comput."},{"key":"3_CR20","unstructured":"IBM InfoSphere DataStage. https:\/\/www.ibm.com\/ms-en\/marketplace\/datastage. Accessed 10 Feb 2021"},{"key":"3_CR21","unstructured":"Informatica. https:\/\/informatica.com. Accessed 10 Feb 2021"},{"key":"3_CR22","unstructured":"Iyer, S.: Enabling ETL test automation in solution delivery teams. In: Excerpt from PNSQC 2014 Proceedings, pp. 1\u201310. PNSQC.org (2014)"},{"key":"3_CR23","volume-title":"The Data Warehouse Toolkit","author":"R Kimball","year":"2002","unstructured":"Kimball, R., Ross, M.: The Data Warehouse Toolkit, 2nd edn. Wiley, New York (2002)","edition":"2"},{"key":"3_CR24","volume-title":"The Data Warehouse Lifecycle Toolkit","author":"R Kimball","year":"2008","unstructured":"Kimball, R., Ross, M., Thornthwaite, W., Mundy, J., Becker, B.: The Data Warehouse Lifecycle Toolkit, 2nd edn. Wiley, Indianapolis (2008)","edition":"2"},{"key":"3_CR25","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"96","DOI":"10.1007\/978-3-642-23544-3_8","volume-title":"Data Warehousing and Knowledge Discovery","author":"X Liu","year":"2011","unstructured":"Liu, X., Thomsen, C., Pedersen, T.B.: ETLMR: a highly scalable dimensional ETL framework based on MapReduce. In: Cuzzocrea, A., Dayal, U. (eds.) DaWaK 2011. LNCS, vol. 6862, pp. 96\u2013111. Springer, Heidelberg (2011). https:\/\/doi.org\/10.1007\/978-3-642-23544-3_8"},{"key":"3_CR26","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1007\/978-3-642-37574-3_1","volume-title":"Transactions on Large-Scale Data- and Knowledge-Centered Systems VIII","author":"X Liu","year":"2013","unstructured":"Liu, X., Thomsen, C., Pedersen, T.B.: ETLMR: a highly scalable dimensional ETL framework based on MapReduce. In: Hameurlain, A., K\u00fcng, J., Wagner, R., Cuzzocrea, A., Dayal, U. (eds.) Transactions on Large-Scale Data- and Knowledge-Centered Systems VIII. LNCS, vol. 7790, pp. 1\u201331. Springer, Heidelberg (2013). https:\/\/doi.org\/10.1007\/978-3-642-37574-3_1"},{"key":"3_CR27","doi-asserted-by":"publisher","unstructured":"Liu, X., Thomsen, C., Pedersen, T.B.: CloudETL: scalable dimensional ETL for hive. In: 18th International Database Engineering & Applications Symposium (IDEAS), pp. 195\u2013206. ACM (2014). https:\/\/doi.org\/10.1145\/2628194.2628249","DOI":"10.1145\/2628194.2628249"},{"key":"3_CR28","doi-asserted-by":"publisher","unstructured":"Marin, M.: A data-agnostic approach to automatic testing of multi-dimensional databases. In: 7th International Conference on Software Testing, Verification and Validation (ICST), pp. 133\u2013142. IEEE (2014). https:\/\/doi.org\/10.1109\/ICST.2014.26","DOI":"10.1109\/ICST.2014.26"},{"key":"3_CR29","first-page":"132","volume-title":"Clean Code: A Handbook of Agile Software Craftsmanship","author":"RC Martin","year":"2009","unstructured":"Martin, R.C.: Clean Code: A Handbook of Agile Software Craftsmanship, pp. 132\u2013133. Pearson Education, London (2009)"},{"key":"3_CR30","unstructured":"Microsoft SQL Server Integration Services. https:\/\/docs.microsoft.com\/en-us\/sql\/integration-services\/sql-server-integration-services. Accessed 10 Feb 2021"},{"key":"3_CR31","doi-asserted-by":"publisher","unstructured":"Naku\u00e7i, E., Theodorou, V., Jovanovic, P., Abell\u00f3, A.: Bijoux: data generator for evaluating ETL process quality. In: 17th International Workshop on Data Warehousing and OLAP (DOLAP), pp. 23\u201332. ACM (2014). https:\/\/doi.org\/10.1145\/2666158.2666183","DOI":"10.1145\/2666158.2666183"},{"key":"3_CR32","unstructured":"Oracle Data Integrator. https:\/\/www.oracle.com\/technetwork\/middleware\/data-integrator\/overview\/index.html. Accessed 20 Feb 2021"},{"key":"3_CR33","unstructured":"Pandas. https:\/\/pandas.pydata.org\/. Accessed 10 Feb 2021"},{"key":"3_CR34","unstructured":"Pentaho Data Integration - Kettle. https:\/\/github.com\/pentaho\/pentaho-kettle. Accessed 10 Feb 2021"},{"issue":"6","key":"3_CR35","doi-asserted-by":"publisher","first-page":"33","DOI":"10.1145\/203241.203251","volume":"38","author":"M Petre","year":"1995","unstructured":"Petre, M.: Why looking isn\u2019t always seeing: readership skills and graphical programming. Commun. ACM (CACM) 38(6), 33\u201344 (1995). https:\/\/doi.org\/10.1145\/203241.203251","journal-title":"Commun. ACM (CACM)"},{"key":"3_CR36","unstructured":"PostgreSQL. https:\/\/postgresql.org. Accessed 10 Feb 2021"},{"key":"3_CR37","unstructured":"psycopg. https:\/\/www.psycopg.org\/. Accessed 10 Feb 2021"},{"key":"3_CR38","unstructured":"PyArrow. https:\/\/pypi.org\/project\/pyarrow\/. Accessed 10 Feb 2021"},{"key":"3_CR39","unstructured":"pygrametl - GitHub. https:\/\/github.com\/chrthomsen\/pygrametl. Accessed 10 Feb 2021"},{"key":"3_CR40","unstructured":"pygrametl - PyPI. https:\/\/pypi.org\/project\/pygrametl\/. Accessed 10 Feb 2021"},{"key":"3_CR41","unstructured":"pygrametl.org - Bulk Loading. http:\/\/pygrametl.org\/doc\/examples\/bulkloading.html. Accessed 10 Feb 2021"},{"key":"3_CR42","unstructured":"pygrametl.org - Documentation. http:\/\/pygrametl.org\/doc\/index.html. Accessed 10 Feb 2021"},{"key":"3_CR43","unstructured":"pygrametl.org - ETL Flow and Data generator. http:\/\/pygrametl.org\/assets\/pygrametlexa.zip. Accessed 10 Feb 2021"},{"key":"3_CR44","unstructured":"Python. https:\/\/python.org. Accessed 10 Feb 2021"},{"key":"3_CR45","unstructured":"Ruby on Rails. https:\/\/rubyonrails.org\/. Accessed 10 Feb 2021"},{"key":"3_CR46","unstructured":"SAP Data Services. https:\/\/www.sap.com\/products\/data-services.html. Accessed 10 Feb 2021"},{"key":"3_CR47","unstructured":"Scriptella. https:\/\/scriptella.org. Accessed 10 Feb 2021"},{"key":"3_CR48","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"43","DOI":"10.1007\/11546849_5","volume-title":"Data Warehousing and Knowledge Discovery","author":"A Simitsis","year":"2005","unstructured":"Simitsis, A., Vassiliadis, P., Terrovitis, M., Skiadopoulos, S.: Graph-based modeling of ETL activities with multi-level transformations and updates. In: Tjoa, A.M., Trujillo, J. (eds.) DaWaK 2005. LNCS, vol. 3589, pp. 43\u201352. Springer, Heidelberg (2005). https:\/\/doi.org\/10.1007\/11546849_5"},{"key":"3_CR49","unstructured":"Talend Open Studio for Data Integration. https:\/\/www.talend.com\/products\/data-integration\/data-integration-open-studio\/. Accessed 10 Feb 2021"},{"key":"3_CR50","unstructured":"The GoFlex Project. https:\/\/goflex-project.eu\/. Accessed 10 Feb 2021"},{"key":"3_CR51","doi-asserted-by":"publisher","first-page":"80","DOI":"10.1016\/j.is.2016.04.005","volume":"63","author":"V Theodorou","year":"2017","unstructured":"Theodorou, V., Jovanovic, P., Abell\u00f3, A., Naku\u00e7i, E.: Data generator for evaluating ETL process quality. Inf. Syst. (IS) 63, 80\u2013100 (2017). https:\/\/doi.org\/10.1016\/j.is.2016.04.005","journal-title":"Inf. Syst. (IS)"},{"key":"3_CR52","series-title":"Lecture Notes in Business Information Processing","doi-asserted-by":"publisher","first-page":"21","DOI":"10.1007\/978-3-319-96655-7_2","volume-title":"Business Intelligence and Big Data","author":"C Thomsen","year":"2018","unstructured":"Thomsen, C., Andersen, O., Jensen, S.K., Pedersen, T.B.: Programmatic ETL. In: Zim\u00e1nyi, E. (ed.) eBISS 2017. LNBIP, vol. 324, pp. 21\u201350. Springer, Cham (2018). https:\/\/doi.org\/10.1007\/978-3-319-96655-7_2"},{"key":"3_CR53","doi-asserted-by":"publisher","unstructured":"Thomsen, C., Pedersen, T.B.: Building a web warehouse for accessibility data. In: 9th International Workshop on Data Warehousing and OLAP (DOLAP), pp. 43\u201350. ACM (2006). https:\/\/doi.org\/10.1145\/1183512.1183522","DOI":"10.1145\/1183512.1183522"},{"key":"3_CR54","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1007\/11823728_1","volume-title":"Data Warehousing and Knowledge Discovery","author":"C Thomsen","year":"2006","unstructured":"Thomsen, C., Pedersen, T.B.: ETLDiff: a semi-automatic framework for regression test of ETL software. In: Tjoa, A.M., Trujillo, J. (eds.) DaWaK 2006. LNCS, vol. 4081, pp. 1\u201312. Springer, Heidelberg (2006). https:\/\/doi.org\/10.1007\/11823728_1"},{"issue":"3","key":"3_CR55","doi-asserted-by":"publisher","first-page":"56","DOI":"10.4018\/jdwm.2009070103","volume":"5","author":"C Thomsen","year":"2009","unstructured":"Thomsen, C., Pedersen, T.B.: A survey of open source tools for business intelligence. Int. J. Data Warehous. Min. (IJDWM) 5(3), 56\u201375 (2009). https:\/\/doi.org\/10.4018\/jdwm.2009070103","journal-title":"Int. J. Data Warehous. Min. (IJDWM)"},{"key":"3_CR56","doi-asserted-by":"publisher","unstructured":"Thomsen, C., Pedersen, T.B.: pygrametl: a powerful programming framework for extract-transform-load programmers. In: 12th International Workshop on Data Warehousing and OLAP (DOLAP), pp. 49\u201356. ACM (2009). https:\/\/doi.org\/10.1145\/1651291.1651301","DOI":"10.1145\/1651291.1651301"},{"key":"3_CR57","doi-asserted-by":"crossref","unstructured":"Thomsen, C., Pedersen, T.B.: pygrametl: a powerful programming framework for extract-transform-load programmers. Technical report, Aalborg University (2009). http:\/\/dbtr.cs.aau.dk\/DBPublications\/DBTR-25.pdf","DOI":"10.1145\/1651291.1651301"},{"key":"3_CR58","doi-asserted-by":"publisher","unstructured":"Thomsen, C., Pedersen, T.B.: Easy and effective parallel programmable ETL. In: 14th International Workshop on Data Warehousing and OLAP (DOLAP), pp. 37\u201344. ACM (2011). https:\/\/doi.org\/10.1145\/2064676.2064684","DOI":"10.1145\/2064676.2064684"},{"key":"3_CR59","doi-asserted-by":"publisher","unstructured":"Thusoo, A., et al.: Hive - a petabyte scale data warehouse using hadoop. In: 26th International Conference on Data Engineering (ICDE), pp. 996\u20131005. IEEE (2010). https:\/\/doi.org\/10.1109\/ICDE.2010.5447738","DOI":"10.1109\/ICDE.2010.5447738"},{"key":"3_CR60","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"307","DOI":"10.1007\/978-3-540-39648-2_25","volume-title":"Conceptual Modeling - ER 2003","author":"J Trujillo","year":"2003","unstructured":"Trujillo, J., Luj\u00e1n-Mora, S.: A UML based approach for modeling ETL processes in data warehouses. In: Song, I.-Y., Liddle, S.W., Ling, T.-W., Scheuermann, P. (eds.) ER 2003. LNCS, vol. 2813, pp. 307\u2013320. Springer, Heidelberg (2003). https:\/\/doi.org\/10.1007\/978-3-540-39648-2_25"},{"issue":"3","key":"3_CR61","doi-asserted-by":"publisher","first-page":"1","DOI":"10.4018\/jdwm.2009070101","volume":"5","author":"P Vassiliadis","year":"2009","unstructured":"Vassiliadis, P.: A survey of extract-transform-load technology. Int. J. Data Warehous. Min. (IJDWM) 5(3), 1\u201327 (2009). https:\/\/doi.org\/10.4018\/jdwm.2009070101","journal-title":"Int. J. Data Warehous. Min. (IJDWM)"}],"updated-by":[{"DOI":"10.1007\/978-3-662-63519-3_9","type":"correction","label":"Correction","source":"publisher","updated":{"date-parts":[[2021,7,15]],"date-time":"2021-07-15T00:00:00Z","timestamp":1626307200000}}],"container-title":["Lecture Notes in Computer Science","Transactions on Large-Scale Data- and Knowledge-Centered Systems XLVIII"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-662-63519-3_3","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2021,7,14]],"date-time":"2021-07-14T02:04:54Z","timestamp":1626228294000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/978-3-662-63519-3_3"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2021]]},"ISBN":["9783662635186","9783662635193"],"references-count":61,"URL":"https:\/\/doi.org\/10.1007\/978-3-662-63519-3_3","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"value":"0302-9743","type":"print"},{"value":"1611-3349","type":"electronic"}],"subject":[],"published":{"date-parts":[[2021]]},"assertion":[{"value":"18 May 2021","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"15 July 2021","order":2,"name":"change_date","label":"Change Date","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"Correction","order":3,"name":"change_type","label":"Change Type","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"In the originally published version of chapter 3, there was an error in the affiliation and email address of the author Ove Andersen, as well as in reference 17. This has been corrected.","order":4,"name":"change_details","label":"Change Details","group":{"name":"ChapterHistory","label":"Chapter History"}}]}}