Kettle knowledge base Q & a series in the 1980s

Au nom des données 2021-10-29 10:52:14 阅读数:384

kettle knowledge base series 1980s

Résumé:

Cet article est partagé sous le nom de données ,Exactement.“ Demande - moi à quel point tu peux t'inquiéter. ,Comme une rivière qui coule vers l'est”.
Sans le savoir,“Au nom des données”Kettle Cinq articles de la base de connaissances ont été mis à jour dans le cadre de la série de sujets sur le soulagement des soucis. “Trente.Quarante sans doute. Cinquante oreilles connaissent le destin. Soixante et une oreille sereine 70 antiques ”, Décrit l'utilisation KettleEn tant queETL Instructions pour le développement de composants communs 、 Logique de mise en œuvre du scénario opérationnel 、 Analyse des anomalies et optimisation des performances des composants .
Aujourd'hui, Nous suivons le rythme des petites inventions , Poursuivre l'examen du titre VI Kettle Série de questions - réponses sur la base de connaissances années 80 , Réaliser l'unification vivante des idées et des pratiques .

Un.. Analyse des anomalies

No073Demande.:

Host '127.0.0.1' is blocked
because of many connection errors;
unblock with 'mysqladmin flush-hosts'Connection
closed by foreign host?

No073Réponse:

La raison peut être trouvée à partir de l'invite d'exception :Le mêmeip Produire trop en peu de temps (Plus quemysqlBase de donnéesmax_connect_errorsValeur maximale de) Blocage causé par une connexion interrompue à la base de données .

  • Tout d'abord,, Interrogeons d'abord les paramètres du serveur de base de données max_connect_errorsConfiguration

    show variables like 'max_connect_errors';
    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | max_connect_errors | 10 |
    +--------------------+-------+

    max_connect_errorsC'est unMySQL Contre - valeurs liées à la sécurité dans , Il est chargé de bloquer trop de clients qui ont échoué à une tentative pour empêcher le craquage violent du mot de passe .

  • max_connect_errors La valeur de n'a pas beaucoup à voir avec la performance ,Par défaut10. Cela signifie que si un client essaie de se connecter à ceci MySQLServeur,Mais ça a échoué.( Comme une erreur de mot de passe, etc. )10Une fois ,EtMySQL Cette connexion client sera bloquée de force inconditionnelle .
  • Si vous voulez réinitialiser la valeur de ce compteur , Doit redémarrer MySQL Serveur ou exécution mysql> flush hosts; Les ordres. Lorsque ce client se connecte avec succès une fois MySQLAprès le serveur, Pour ce client max_connect_errors Ça va s'effacer. .Simax_connect_errorsRéglage trop petit, La page Web peut vous demander de ne pas vous connecter au serveur de base de données .
  • Solutions1:Modifiermax_connect_errorsValeur de

    (1)EntréeMysqlVue de la base de donnéesmax_connect_errors:
    show variables like '%max_connect_errors%';
    (2)Modifier<span style="color:red;">max_connect_errors</span>Valeur de:
    set global max_connect_errors = 80; 
    (3)Voir si la modification a réussi
    show variables like '%max_connect_errors%';
    • Solutions2:Utilisermysqladmin flush-hosts Ordonnez le nettoyage. hostsDocumentation
      .
      (1) Modifier avec la commande dans le répertoire trouvé :

      > mysqladmin -u xxx -p flush-hosts

      Ou

      > flush hosts;
    • Solutions3:Redémarrermysqld.
      Ou avant le redémarrage , Augmentez ce paramètre dans le fichier de configuration .

      > vi /etc/my.cnf
      max_connect_errors = 80

No074Demande.:

Kettle Envoyer des pièces jointes ,Comment le résoudre??

No074Réponse:

Modifierspoon Configuration du script de démarrage ,Inset OPT=%OPT% %PENTAHO_DI_JAVA_OPTIONS% Fin de la ligne ,Ajouter la configuration suivante:

"-Dmail.mime.encodefilename=true"
"-Dmail.mime.charset=utf-8"
"-Dfile.encoding=utf-8" 

No075Demande.:

Kettle ES Bulk Insert écriture de données par lots ,Kibana La requête est retardée ?

No075Réponse:

  • Tout d'abord,, Il est probable que la quantité de données écrites et la quantité de concurrence sont excessives en peu de temps. ,esDemaster Je ne peux pas gérer ça. ,segment La fusion est une opération longue .
  • Deuxièmement, il peut y avoir les raisons suivantes: :

    • 1、 Trop de pièces , Il est recommandé que le nombre de segments d'un seul noeud ne dépasse pas 1000- Oui.;shardMoins il y en a., Moins les frais généraux d'écriture sont élevés ;
    • 2、 L'indexation automatique des données écrites est la condition la plus susceptible de se produire ;
    • 3、 Écrire des données en vrac refresh Intervalle de temps trop court ;
    • 4、 Trop de champs pour l'index ( Des dizaines, des centaines. )

2.. Analyse du rendement

No076Demande.:

Vous comprenez.count(*)、count(1)、count(column) C'est la différence. ?

No076Réponse:

Nous pouvons le voir sous deux angles différents :

  • Exécution :

    • 1、count(*) Inclure toutes les colonnes , équivalent au nombre de lignes , Dans les statistiques , La valeur de colonne n'est pas ignorée NULL
    • 2、count(1) Inclure ignorer toutes les colonnes ,Avec1 Représente la ligne de code , Dans les statistiques , La valeur de colonne n'est pas ignorée NULL
    • 3、count(column) Inclure uniquement la colonne du nom de colonne , Dans les statistiques , Ignorer la valeur de colonne vide ( Le vide ici n'est pas une chaîne vide ou 0,C'est un signe.null)Nombre de, C'est - à - dire qu'un champ a une valeur de NULLHeure, Pas de statistiques. .
  • Efficacité de la mise en œuvre :

    • 1、 Nom de la colonne comme clé primaire ,count(column)Quecount(1)Allez
    • 2、 Le nom de colonne n'est pas une clé primaire ,count(1)Quecount(column)Allez
    • 3、 Si le tableau contient plus d'une colonne et qu'il n'y a pas de clé primaire ,Et count(1) Est supérieur à count(*)
    • 4、S'il y a une clé primaire,Et select count(Clé primaire) L'efficacité d'exécution est optimale
    • 5、Si le tableau n'a qu'un seul champ,Et select count(*)Optimum.

No077Demande.:

Quoi? Kettle La conversion ou l'exécution du travail prend autant de temps ?

No077Réponse:

Quel que soit le composant utilisé , Tout d'abord, regardez la représentation de l'exécution des tâches. :

  • 1、 Exécution lente des tâches ?( Pourquoi penser lentement , Comment savoir si c'est lent? )
  • 2、 Trouver quel lien est lent ?

    • 2.1、 Voir le temps d'exécution de chaque lien , Faire une observation préliminaire ;
    • 2.2、 Activez la sonde. ,Observationmetrics Informations sur la mesure des étapes .
  • 3、 J'ai trouvé le lien le plus long. , Pensez à ce qui pourrait causer une logique lente ?

  • 4、 Ou peut - être avec le serveur de base de données source 、etlServeur、 Goulot d'étranglement des performances des ressources du système ou de la base de données, comme le serveur de base de données cible .

    • 4.1、 Optimisation des paramètres sous - jacents du serveur nécessaire ( Comme le nombre de poignées de fichiers, etc. )
    • 4.2、Niveau de la base de données(Par exemple:server Démarrage de l'Instance allocation de mémoire, etc. )
    • 4.3、Cherche.DBA Coopérer à l'analyse des performances
  • 5、 Ou un problème d'utilisation des composants , Ou le composant lui - même a un goulot d'étranglement de performance

Trois. Développement pratique

No078Demande.:

Comment maîtriser à la fois json Analyse du vrai sens ?

No078Réponse:

PourJson Il existe deux façons standard de traiter l'analyse des champs :

  • 1.Utilisez votre propreJsonInput Résolution des composants d'entrée

    • 1.1 Analyse des données à un seul niveau

      Idées analytiques :JsonInput Les spécifications d'utilisation sont les suivantes: , Analyse des données à un seul niveau , Ça peut être fait en même temps. ;
      Ici, nous analysons directement 4Couche,itemCodeConfiguration du chemin pour,JsonArrayAveckey[*]Accès,JsonObjectAveckeyAccès direct:

      • $..extendList[*]..itemCode( Omettre les informations de chemin ici )
      • Ou <span style="color:orangered">$..extendList[*].itemCode</span>( Omettre les informations de chemin ici )
      • Ou $.result.paySuiteDataList[*].extendList[*].itemCode

        Résultats analytiques,Les détails sont les suivants:
    • 1.2 Analyse des données multicouches , Nécessite une analyse hiérarchique .Encore un peu., Il est nécessaire de s'assurer que les champs de métadonnées analysés à chaque niveau sont cohérents. ,SinonJsonInput Les composants vont mal tourner. .

      • Ici, nous devons analyser 3Couche et couche4Données de niveau, Mise en œuvre de la combinaison de champs de flux de données , Analyser d'abord 3Couche,extendListLe chemin vers$.result.paySuiteDataList[*].extendList, Autres couches key Obtenir un préfixe de chemin cohérent



      Résultats analytiques,Les détails sont les suivants:

      • Au troisième étage. extendList Basé sur le chemin , Analyse par 4CoucheJsonArrayDonnées.itemCode Chemin configuré pour $..itemCode


      Résultats analytiques,Les détails sont les suivants:

  • 2.UtiliserJava Résolution des composants du script (IntroductionFastJsonOuJacksonAttendez.Json Paquets de sérialisation et de désrialisation ),IciFastJsonPar exemple

    • 1、import ImporterFastJsonSac;
    • 2、Json Séquence inverse JsonArrayOuJsonObject,BaseJson Propriétés de l'objet de la hiérarchie du corps pour les appels spécifiques JSONObject.parseObjectOuJSONArray.parseArrayAttendez.APIMéthodes
    • 3、 Obtenir la hiérarchie actuelle key Données de terrain getStringOugetObjectAttendez.APIMéthodes

No079Demande.:

Comment jouer? xmlAnalyse?

No079Réponse:

PourXML Résolution de fichiers ou de chaînes de champs , Les étapes clés sont les suivantes: :
Comme suit:xml La structure est un exemple , Effectuer une analyse détaillée des étapes ,Pour information.

 <Session_header Code="xmltest">
<InfoSession>
<InfoSessionData User="Username1">
<Data>Data1</Data>
</InfoSessionData>
</InfoSession>
<InfoSession>
<InfoSessionData User="Username2">
<Data>Data2</Data>
</InfoSessionData>
</InfoSession>
<InfoSession>
<InfoSessionData User="Username3">
<Data>Data3</Data>
</InfoSessionData>
</InfoSession>
<Session>
<SessionData>
<Parameter>
<User>Username1</User>
<Password>password123</Password>
</Parameter>
<OutputData>
<Step>
<Error_Message>Please have transaction ID and related information ready. Timestamp : 20070731 01:50:06 Session : 0201</Error_Message>
</Step>
</OutputData>
</SessionData>
<SessionData>
<Parameter>
<User>Username2</User>
<Password>password345</Password>
</Parameter>
<OutputData>
<Step>
<Error_Message>error occurred Timestamp : 20070731 01:53:25</Error_Message>
</Step>
</OutputData>
</SessionData>
<SessionData>
<Parameter>
<User>Username3</User>
<Password>password567</Password>
</Parameter>
<OutputData>
<Step>
<Error_Message>Transaction Id :361163328</Error_Message>
<Status>Processed according to contract/plan provisions</Status>
</Step>
</OutputData>
</SessionData>
</Session>
</Session_header>
  • 1、Désignationxml Source du flux de données ,C'est un document? Ou un champ de flux de données ? Ou un message de retour d'interface ?
  • 2、Voirxml Structure des étiquettes de données , Déterminer le répertoire des boucles Session_header/Session/SessionData;
  • 3、 Clarifier les informations sur les champs à analyser , Est une valeur d'attribut d'étiquette ? Ou valeur de l'étiquette ?

    • Code:PourSession_header Valeur de l'attribut d'étiquette pour , Et le chemin de lecture circulaire est Session_header/Session/SessionData, C'est pour ça que j'ai besoin de deux étages. ../../, Plus ici, vous obtenez la valeur de l'attribut de l'étiquette , Donc configuré pour @Code. Donc l'ensemble CodeChampXMLLe chemin est“../../@Code”
    • User:Ici.xml Structure 5Stratifié<User> Valeur de l'étiquette pour , Et le chemin de lecture circulaire est Session_header/Session/SessionData, Il faut donc descendre de deux étages. , Le chemin spécifique est utilisé ici Parameter/User.Password、Status、Error_Message Valeur de l'étiquette XML Configuration du chemin comme ci - dessus logique
    • Data:Ici.xml Structure 4Stratifié<Data> Valeur de l'étiquette pour , Et le chemin de lecture circulaire est Session_header/Session/SessionData, C'est pour ça qu'il faut d'abord remonter deux étages. ../../, Deux étages plus bas. InfoSession/InfoSessionData.Et iciData La valeur de l'étiquette doit être basée sur la couche supérieure InfoSessionData Propriétés de l'étiquette pour UserValeur correspondante,AvecSession_header/Session/SessionData/Parameter/User Les valeurs de l'étiquette correspondent une par une .Ici.InfoSessionData Chemin à ajuster à InfoSessionData[@[email protected]_User-], Enfin, prenez le numéro. 4Stratifié<Data> Valeur de l'étiquette pour ,EnfinData Valeur de l'étiquette correspondante XML Le chemin est configuré comme ../../InfoSession/InfoSessionData[@[email protected]_User-]/Data
  • 4、 Enfin, regardons plus en détail , Exemple de résultats d'exécution , Pour vérifier si la logique de configuration est correcte .

No080Demande.:

Je l'ai fait.200+Tableau, Synchronisation complète des données requise ,Kettle Existe - t - il une solution universelle ?

No080Réponse:

Si votreETL La logique n'est pas particulièrement personnalisée , En théorie, il est possible d'avoir une configuration universelle , Quels champs voulez - vous récupérer quels champs , La cible ne configure pas la relation de cartographie . Permet de faire correspondre automatiquement le flux de données à la base de données cible dans l'ordre .

  • 1 Programmes d'entrée Job A, Responsable de l'invocation de la requête Trans A, Et exécution des appels circulaires Job B;
  • 1ExécutionJob B , Responsable de l'initialisation des appels Trans B, Et appeler le noyau pour effectuer la transformation Trans C;
  • 1 Conversion (s) Trans A Responsable de la lecture des informations du tableau de configuration , Copier dans l'ensemble de résultats ;
  • 1 Conversion (s) Trans B Responsable de la lecture des informations de ligne de configuration à partir de l'ensemble de résultats , Assigner une valeur à une variable de réglage ;
  • 1 Conversion (s) Trans C Responsable de la mise en œuvre du noyau dur ETLFonctionnement,Entrée du tableau( Selon les informations des paramètres de la table de base de données source de configuration ,Obtenir la dynamiqueSQL

    ${S_SQL}

    Ou raccords dynamiques SQL

    select ${s_column} from ${s_tb} where ${s_where})

    + Traitement personnalisé (Non.)+Tableau des résultats( Tableau des cibles dynamiques 【${t_tb}】).

Quatre.KETTLE Examen thématique

KettleDéveloppement de plug - insSplunkArticles

KettleDéveloppement de plug - insElasticsearchArticles

KettleDéveloppement de plug - insKafkaConsumerAssignPartitionArticles

KettleDéveloppement de plug - insKafkaProducerArticles

KettleDéveloppement de plug - insKafkaConsumerArticles

KettleDéveloppement de plug - insKafkaConsumerAssignPartitionArticles

KettleDéveloppement de plug - insMQToSQLArticles

KettleDéveloppement de plug - insRedisArticles

Kettle Construction rapide d'une plate - forme d'entrepôt de données de base

Kettle Base de connaissances questions et réponses

Kettle Base de connaissances questions et réponses série 40 pas de confusion

Kettle Base de connaissances série de questions et réponses 50 pour connaître le destin

Kettle Base de connaissances série de questions et réponses

Kettle Série de questions - réponses sur la base de connaissances

KettleSérie de combat réelCarteApplications groupées

Kettle Le courrier dynamique de la série Live

Kettle Base de la série de combat réel CarteConstruire des microservices


Même s'ils sont petits, ils sont faibles.,Mais les lecteurs sont pleins d'étoiles.Ouvre la porte.,J'espère que vous pourrez enseigner l'écriture originale.,L'attente est pleine de cœur,La gratitude déborde de mots.Un mot.,Bienvenue à contacter Little Editor pour contribuer à votre article original!
Code Scan attention,Grandir ensemble
Copyright:Cet article est[Au nom des données]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/10/20211029105029575R.html