Architecture Big Data : Industrialisez l'alimentation de votre Data Lake sans sacrifier la performance

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Expert
Publié le :
Michael

Le Conseil de l'Expert

Michael
Responsable de l'infrastructure Viya.

Ce script est un excellent exemple de code "prêt pour la production", conçu pour interagir avec des environnements Big Data (probablement Hadoop/Hive via les services REST).

1. L'abstraction par les Macros
L'utilisation des variables globales (%GLOBAL, %let) pour définir l'hôte, le port et le fichier de données est une bonne pratique d'architecture. Elle découple la logique de traitement de la configuration physique.

Avantage : Ce code est portable. Il peut passer du développement à la production sans modification du cœur du programme, simplement en changeant les valeurs des macros au début.

2. L'indice technologique (SAS_HADOOP_RESTFUL)
La ligne options set=SAS_HADOOP_RESTFUL=1; est cruciale. Elle indique que nous opérons dans un environnement moderne où la communication avec le cluster (Hadoop) ne se fait pas par des binaires clients classiques, mais via des services Web (REST). C'est souvent requis pour traverser les pare-feux ou utiliser des passerelles comme Knox.

3. La mécanique du Bulkload
L'option BULKLOAD=YES change radicalement la méthode de transfert.

Au lieu d'insérer les lignes une par une (ce qui serait extrêmement lent sur un cluster distant), SAS écrit les données dans un fichier plat temporaire (défini par BL_DATAFILE). Ce fichier est ensuite poussé en bloc vers le serveur, offrant des performances d'ingestion incomparables pour les gros volumes.

Que ce soit via PROC SQL (plus lisible pour les analystes) ou l'étape DATA (plus flexible), ce script privilégie la performance brute et la maintenabilité.
Ce programme utilise des macros globales pour configurer les options de chargement en masse (fichier de données, hôte, port). Avant le chargement, il effectue un nettoyage en supprimant les tables cibles existantes. Une table de données SAS© temporaire est ensuite créée en mémoire à partir de données en ligne. Enfin, il présente deux approches pour le chargement en masse : la première via une instruction `CREATE TABLE AS SELECT` de PROC SQL avec des options BULKLOAD, et la seconde via une étape DATA STEP où les options BULKLOAD sont spécifiées directement sur l'instruction DATA. Les options de chargement en masse sont paramétrées par des variables macro.
Analyse des données

Type : CREATION_INTERNE


La source de données `work.testblkld` est créée directement dans le script via une étape DATA et l'instruction `cards;` avec des données en ligne (amy, bill, etc.). Aucune donnée externe non gérée n'est requise.

1 Bloc de code
Macro Définition
Explication :
Ce bloc déclare et initialise des macros globales (`BLDATF`, `BLHOST`, `BLPORT`) qui seront utilisées ultérieurement pour spécifier les paramètres de l'opération de chargement en masse, tels que le fichier de données, l'hôte et le port cible.
Copié !
1 %GLOBAL BLDATF;
2 %GLOBAL BLHOST;
3 %GLOBAL BLPORT;
4 
5 %let BLDATF =;
6 %let BLHOST =;
7 %let BLPORT =;
2 Bloc de code
OPTIONS Statement
Explication :
Définit une option système SAS (`SAS_HADOOP_RESTFUL`) à 1. Cette option est probablement liée à la configuration d'une connexion RESTful avec un environnement Hadoop, ce qui est courant avec SAS/ACCESS pour certains systèmes de gestion de bases de données.
Copié !
1options SET=SAS_HADOOP_RESTFUL=1;
3 Bloc de code
PROC DELETE
Explication :
Ces appels à PROC DELETE sont utilisés pour supprimer les tables `testblkld1` et `testblkld2` de la bibliothèque `mydblib` si elles existent. Cela assure un environnement propre et évite les erreurs potentielles lors de la recréation de ces tables.
Copié !
1 
2PROC DELETE
3DATA=mydblib.testblkld1;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.testblkld2;
8 
9RUN;
10 
4 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA crée une table SAS temporaire nommée `testblkld` dans la bibliothèque `WORK`. Les données sont lues en ligne à l'aide de l'instruction `cards;`, définissant les variables `name`, `age`, `sex` et `bdate` avec le format de date `mmddyy.`.
Copié !
1DATA work.testblkld;
2 INPUT name $ age sex $ bdate mmddyy.;
3 CARDS;
4amy 3 f 030185
5bill 12 m 121277
6charlie 35 m 010253
7david 19 m 101469
8elinor 42 f 080845
9pearl 78 f 051222
10vera 96 f 101200
11frank 24 m 092663
12georgia 1 f 040687
13henry 46 m 053042
14joann 27 f 020461
15buddy 66 m 101432
16;
17RUN;
5 Bloc de code
PROC SQL
Explication :
Ce bloc utilise PROC SQL pour créer une nouvelle table `testblkld1` dans la bibliothèque `mydblib`. Les options `BULKLOAD=YES`, `BL_DATAFILE`, `BL_HOST` et `BL_PORT` sont spécifiées pour activer et configurer le chargement en masse, permettant un transfert de données optimisé depuis la table `work.testblkld`.
Copié !
1PROC SQL;
2create TABLE mydblib.testblkld1
3 (BULKLOAD=YES
4 BL_DATAFILE=&bldatf
5 BL_HOST=&blhost
6 BL_PORT=&blport )
7 as select * from work.testblkld;
8QUIT;
6 Bloc de code
DATA STEP
Explication :
Ce bloc utilise une étape DATA pour créer une table `testblkld2` dans la bibliothèque `mydblib`. Comme avec PROC SQL, les options `BULKLOAD=YES`, `BL_DATAFILE`, `BL_HOST` et `BL_PORT` sont incluses dans l'instruction DATA pour exécuter un chargement en masse des données de `work.testblkld`.
Copié !
1DATA mydblib.testblkld2 (
2 BULKLOAD=YES
3 BL_DATAFILE=&bldatf
4 BL_HOST=&blhost
5 BL_PORT=&blport );
6 
7 
8SET work.testblkld;
9RUN;
L'Astuce Pro
Puisque l'option SAS_HADOOP_RESTFUL=1 est définie, configurez la macro &BLPORT avec le port du service WebHDFS (souvent 50070 ou 9870) et non le port RPC standard, car le chargement s'effectuera via des requêtes HTTP et non via le protocole binaire Hadoop.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : S A S S A M P L E L I B R A R Y