{"id":10290,"date":"2014-04-05T13:03:15","date_gmt":"2014-04-05T11:03:15","guid":{"rendered":"http:\/\/flaven.fr\/?p=10290"},"modified":"2026-09-16T10:07:46","modified_gmt":"2026-09-16T08:07:46","slug":"mysql-xml-bigdata-resorber-la-dette-technique-et-unifier-les-donnees-pour-le-marketing","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2014\/04\/mysql-xml-bigdata-resorber-la-dette-technique-et-unifier-les-donnees-pour-le-marketing\/","title":{"rendered":"MySQL, XML, BigData &#8211; R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing"},"content":{"rendered":"\n<p>  <!--  MySQL, XML, BigData - R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing --><br \/>\n  \t<!--  MySQL, XML, BigData, dette, donn\u00e9es, marketing --><\/p>\n<p>Il est beaucoup question du ph\u00e9nom\u00e8ne du Cloud, de la big data. Toutefois, la consolidation des donn\u00e9es dans un espace viable et optimale n&#8217;est pas une tache ais\u00e9e. Comme il existe de la dette technique, il existe des adh\u00e9rences fortes dans la manipulation des donn\u00e9es li\u00e9es \u00e0 des pesanteurs historiques (donn\u00e9es sous diff\u00e9rents formats, donn\u00e9es non structur\u00e9es). La premi\u00e8re phase avant d&#8217;envisager de structurer les donn\u00e9es, il faut d&#8217;abord les r\u00e9colter et d&#8217;auditer l&#8217;existant.<\/p>\n<p>Il faudra donc souvent manipuler des fichiers physiques qu&#8217;il faut traiter et cela souvent \u00e0 moindre frais. Bref, uniformiser rapidement avec une contrainte financi\u00e8re et de temps forte (pas de thune, peu de temps).<\/p>\n<p><b>En substance, on va transf\u00e9rer des donn\u00e9es mortes &#8220;dump\u00e9s&#8221; au format XML pour les injecter dans une BDD MySQL, ce qui consiste \u00e0 explorer la commande SQL <code>LOAD DATA LOCAL INFILE<\/code> <\/b> <\/p>\n<p><i>Note : Le test de transfert de donn\u00e9es \u00e0 \u00e9t\u00e9 fait via un client MySQL sur MAMP  dont la version est la suivante MySQL 5.5.33<\/i><\/p>\n\t\t\t\t\t<div class=\"textwidget-unique text\">\n\n\t\t\t\t\t        <div class=\"textwidget-photo\">\n\t\t\t\t\t                <a href=\"https:\/\/flaven.fr\/books\/mysql-cookbook\/\" class=\"photo\" title=\"MySQL Cookbook 2e\"><img loading=\"lazy\" decoding=\"async\" alt=\"MySQL Cookbook 2e\" src=\"http:\/\/ecx.images-amazon.com\/images\/I\/51opx9TuqkL._SL160_.jpg\" width=\"119\" height=\"160\"><\/a>\n\t\t\t\t\t            <\/div>\n\t\t\t\t\t\t<div class=\"info half\">\n\t\t\t\t\t\t\t<h2 class=\"product-title\"><a class=\"head\" href=\"https:\/\/flaven.fr\/books\/mysql-cookbook\/\" title=\"MySQL Cookbook 2e\">MySQL Cookbook 2e<\/a><\/h2>\n\t\t\t\t\t\t\t\n\t\t\t\t\t        <p class=\"product-excerpt\">Un livre vraiment complet pour \"masteriser\" le format de base de donn\u00e9es le plus r\u00e9pandu sur le Web : MySQL. Un livre tr\u00e8s pratique, truff\u00e9 de cas pratiques avec des solutions cl\u00e9 en main notamment les bonnes lignes de commande pour parfaire votre maitrise de la console MySQL.<\/p>\n\t\t\t\t\t\t\t\tGenre(s) : <a href=\"https:\/\/flaven.fr\/book-type\/base-de-donnees-2\/\" rel=\"tag\">Base de donn\u00e9es<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/mysql\/\" rel=\"tag\">MySQL<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/nosql\/\" rel=\"tag\">NoSQL<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/php\/\" rel=\"tag\">PHP<\/a><br>Auteur(s) : <a href=\"https:\/\/flaven.fr\/book-author\/paul-dubois\/\" rel=\"tag\">Paul Dubois<\/a><br>\n\t\t\t\t\t<div class=\"but-wrap\"><a href=\"http:\/\/www.amazon.fr\/MySQL-Cookbook-2e-Paul-Dubois\/dp\/059652708X%3FSubscriptionId%3DAKIAJYB2QGGQOTHQLRPA%26tag%3Dhecubenet-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D059652708X\" class=\"button\"><span><i class=\"more\"><\/i>+ d'infos<\/span><\/a><\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\n<h4>The XML Transfert<\/h4>\n<p>Bon, il est vrai que notre exemple est relativement facile, on triche un peu. Notre source de donn\u00e9es est \u00e0 la base, d\u00e9j\u00e0 dans un format quelque peu structur\u00e9 (donn\u00e9es structur\u00e9s au format XML) et pr\u00eat \u00e0 l&#8217;\u00e9change ! Cela pourrait \u00eatre tout aussi bien des fichiers statiques de JSON, des tableurs excel au format CSV&#8230; La question de la consolidation devient beaucoup plus probl\u00e9matique lorsque on a une h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 de format de donn\u00e9es, de structure ! Comment mapper, comment structurer, comment tirer la substantifique moelle de tout ce &#8220;fatras&#8221; digital, quelle socle technologique pour requ\u00eater l&#8217;ensemble (NoSQL, RDBM)&#8230; Bref, des questions \u00e9minemment importantes car la qualit\u00e9 informationnel d\u00e9pend des recoupements pertinents et de la facilit\u00e9 \u00e0 agr\u00e9ger\/consolider d&#8217;autres sources de donn\u00e9es en cours de projet, appelons cela la scalabilit\u00e9 de pertinence.<\/p>\n<p>Bon, laissons tomber les concepts, donnons plut\u00f4t une petite recette.<br \/>\n<b>La base de donn\u00e9es MYSQL qui va recevoir les donn\u00e9es du XML<\/b><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2014\/04\/xml_transfert_1.jpg\" width=\"500\" height=\"313\" alt=\"MySQL, XML, BigData - R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing\"><\/p>\n<p><b>Dans la client MySQL, le mot de passe sur Mac et sur <code>MAMP<\/code> est g\u00e9n\u00e9ralement <code>root<\/code><\/b><\/p>\n<pre lang=\"sql\">\/Applications\/MAMP\/Library\/bin\/mysql -u root -p<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2014\/04\/xml_transfert_2.jpg\" width=\"500\" height=\"313\" alt=\"MySQL, XML, BigData - R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing\"><\/p>\n<p><b>Dans la client MySQL, s\u00e9lection de la base via la commande<\/b><\/p>\n<pre lang=\"sql\">USE le_nom_votre_base; <\/pre>\n<p><b>Bien s&#8217;assurer que la table est vide avant de lancer l&#8217;import<\/b><\/p>\n<pre lang=\"sql\">TRUNCATE TABLE person;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2014\/04\/xml_transfert_3.jpg\" width=\"500\" height=\"313\" alt=\"MySQL, XML, BigData - R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing\"><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2014\/04\/xml_transfert_4.jpg\" width=\"500\" height=\"313\" alt=\"MySQL, XML, BigData - R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing\"><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2014\/04\/xml_transfert_5.jpg\" width=\"500\" height=\"313\" alt=\"MySQL, XML, BigData - R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing\"><\/p>\n<p><b>Histoire de cr\u00e9er la table qui va bien. La BDD se nomme <code>le_nom_votre_base<\/code> et la table <code>member_list_index<\/code><\/b><\/p>\n<pre lang=\"sql\">\r\n  -- --------------------------------------------------------\r\n\r\n  --\r\n  -- Structure de la table `member_list_index`\r\n  --\r\n\r\n  CREATE TABLE member_list_index (\r\n     id int(11) NOT NULL AUTO_INCREMENT,\r\n     email varchar(255) NOT NULL DEFAULT '',\r\n     firstname varchar(255) NOT NULL DEFAULT '',\r\n     lastname varchar(255) NOT NULL DEFAULT '',\r\n     PRIMARY KEY (id)\r\n  ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;\r\n\r\n  --\r\n  -- Full text search email, firstname, lastname\r\n  --\r\n\r\n\r\n\r\n  CREATE FULLTEXT INDEX ind_full_email\r\n  ON member_list_index (email);\r\n\r\n  CREATE FULLTEXT INDEX ind_full_firstname\r\n  ON member_list_index (firstname);\r\n\r\n  CREATE FULLTEXT INDEX ind_full_lastname\r\n  ON member_list_index (lastname);\r\n\r\n  CREATE FULLTEXT INDEX ind_full_ema_fir_las\r\n  ON member_list_index (email, firstname, lastname);\r\n<\/pre>\n<p><b>Le fichier person_dump_1.xml<\/b><\/p>\n<pre lang=\"xml\">\r\n  &lt;?xml version=\"1.0\"?&gt;\r\n  &lt;list&gt;\r\n         &lt;person&gt;\r\n             &lt;PersonId num=\"1\"&gt;&lt;\/PersonId&gt;\r\n             &lt;FirstName&gt;Mikael&lt;\/FirstName&gt;\r\n             &lt;LastName&gt;Ronstr&ouml;m&lt;\/LastName&gt;\r\n         &lt;\/person&gt;\r\n         &lt;person&gt;\r\n             &lt;PersonId num=\"2\"&gt;&lt;\/PersonId&gt;\r\n             &lt;FirstName&gt;Lars&lt;\/FirstName&gt;\r\n             &lt;LastName&gt;Thalmann&lt;\/LastName&gt;\r\n         &lt;\/person&gt;\r\n   &lt;\/list&gt;\r\n<\/pre>\n<pre lang=\"sql\">\r\n  LOAD DATA LOCAL INFILE '\/le-chemin\/vers-votre\/fichier\/person_dump_3_1.xml'\r\n   INTO TABLE person\r\n   CHARACTER SET binary\r\n   LINES STARTING BY '&lt;person&gt;' TERMINATED BY '&lt;\/person&gt;'\r\n   (@person)\r\n   SET\r\n     person_id = ExtractValue(@person:=CONVERT(@person using utf8), 'PersonId\/@num'),\r\n     fname = ExtractValue(@person, 'FirstName'),\r\n     lname = ExtractValue(@person, 'LastName')\r\n   ;\r\n  \r\n<\/pre>\n<p><b>Conclusion : Il existe bien une t\u00e2che ingrate, celle de devoir consolider des donn\u00e9es provenant de sources diverses et d&#8217;y trouver une coh\u00e9rence en vue d&#8217;une exploitation future. C&#8217;est le sens d&#8217;une API mais avant de se lancer dans un projet aussi ambitieux, &#8220;N&#8217;oubliez pas de nettoyer les chiottes num\u00e9riques et d&#8217;\u00e9teindre la lumi\u00e8re ?&#8221;, ce qui en novlangue digito-consultant signifie &#8220;Avez-vous une strat\u00e9gie claire dans la consolidation des vos donn\u00e9es, la cible \u00e9tant le bigdata, afin d&#8217;en tirer des m\u00e9triques significatifs pour une pertinence informationnelle optimale ?&#8221;.<\/b><\/p>\n<p><!-- Rand Paul, Aynd Rand, Libertarien, Ludwig von Mises institute --><\/p>\n<h2>En savoir plus<\/h2>\n<ul>\n<li>All About the MySQL 5.5 LOAD XML INLINE Statement<br \/><a href=\"http:\/\/www.databasejournal.com\/features\/mysql\/all-about-the-mysql-5.5-load-xml-inline-statement.html\" target=\"_blank\">http:\/\/www.databasejournal.com\/features\/mysql\/all-about-the-mysql-5.5-load-xml-inline-statement.html<\/a><\/li>\n<li>13.2.7 LOAD XML Syntax<br \/><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/load-xml.html\" target=\"_blank\">http:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/load-xml.html<\/a><\/li>\n<li>8.8. mysqldump, sauvegarde des structures de tables et les donn\u00e9es<br \/><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/fr\/mysqldump.html\" target=\"_blank\">http:\/\/dev.mysql.com\/doc\/refman\/5.0\/fr\/mysqldump.html<\/a><\/li>\n<li>12.11 XML Functions<br \/><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/xml-functions.html\" target=\"_blank\">http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/xml-functions.html<\/a><\/li>\n<li>Load XML Local Infile<br \/><a href=\"http:\/\/blog.mclaughlinsoftware.com\/2010\/09\/26\/load-xml-local-infile\/\" target=\"_blank\">http:\/\/blog.mclaughlinsoftware.com\/2010\/09\/26\/load-xml-local-infile\/<\/a><\/li>\n<li>Update XML in DB2 9.5<br \/><a href=\"http:\/\/www.ibm.com\/developerworks\/data\/library\/techarticle\/dm-0710nicola\/\" target=\"_blank\">http:\/\/www.ibm.com\/developerworks\/data\/library\/techarticle\/dm-0710nicola\/<\/a><\/li>\n<li>Transforming an XML document into a table structure with Pentaho Kettle\/PDI<br \/><a href=\"http:\/\/www.joyofdata.de\/blog\/transforming-an-xml-document-into-a-table-structure-with-pentaho-kettle-pdi\/\" target=\"_blank\">http:\/\/www.joyofdata.de\/blog\/transforming-an-xml-document-into-a-table-structure-with-pentaho-kettle-pdi\/<\/a><\/li>\n<li>Data Formatting, Working with XML Data in MySQL<br \/><a href=\"http:\/\/www.databasejournal.com\/features\/mysql\/article.php\/3848826\/Data-Formatting-Working-with-XML-Data-in-MySQL.htm\" target=\"_blank\">http:\/\/www.databasejournal.com\/features\/mysql\/article.php\/3848826\/Data-Formatting-Working-with-XML-Data-in-MySQL.htm<\/a><\/li>\n<li>Recherches avec FULLTEXT<br \/><a href=\"http:\/\/fr.openclassrooms.com\/informatique\/cours\/administrez-vos-bases-de-donnees-avec-mysql\/recherches-avec-fulltext\" target=\"_blank\">http:\/\/fr.openclassrooms.com\/informatique\/cours\/administrez-vos-bases-de-donnees-avec-mysql\/recherches-avec-fulltext<\/a><\/li>\n<li>Une pr\u00e9sentation efficace sur XML\/XPath Support In MySQL-5.x par Alexander Barkov Full time developer April, 2005 mis \u00e0 dispo par Carlos Proal Aguilar<br \/><a href=\"http:\/\/ict.udlap.mx\/people\/carlos\/\" target=\"_blank\">http:\/\/ict.udlap.mx\/people\/carlos\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Il est beaucoup question du ph\u00e9nom\u00e8ne du Cloud, de la big data. Toutefois, la consolidation des donn\u00e9es dans un espace viable et optimale n&#8217;est pas&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2014\/04\/mysql-xml-bigdata-resorber-la-dette-technique-et-unifier-les-donnees-pour-le-marketing\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">MySQL, XML, BigData &#8211; R\u00e9sorber la dette technique et unifier les donn\u00e9es pour le marketing<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":10297,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"MySQL, XML, BigData: r\u00e9sorber la dette technique et unifier les donn\u00e9es marketing. Audit, collecte, et traitement de fichiers physiques pour structurer les donn\u00e9es.","bf_ai_og_title":"MySQL, XML, BigData: Unifier les donn\u00e9es","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3439,3440,3441,3444,3448],"tags":[2084,2085,609,468,2211,3491,90],"class_list":["post-10290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apis-integration","category-cloud-infrastructure","category-data-analytics","category-programming-databases","category-tools-productivity","tag-bigdata","tag-dette","tag-donnees","tag-marketing","tag-mysql","tag-nosql","tag-xml"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-2FY","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2014\/04\/xml_transfert_bf.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/10290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=10290"}],"version-history":[{"count":2,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/10290\/revisions"}],"predecessor-version":[{"id":10298,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/10290\/revisions\/10298"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/10297"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=10290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=10290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=10290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}