ETL, Daten-Transformation CAS

Tabellen mit fedSql.execDirect verbinden

Dieser Code ist auch verfügbar auf: English Español
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Die Aktion `fedSql.execDirect` ist ein leistungsstarkes Werkzeug in SAS© Viya, um SQL-Abfragen direkt auf die in Cloud Analytic Services (CAS) geladenen Daten auszuführen. Dieses Beispiel beschreibt den Prozess des Ladens von Rohdaten, deren Verknüpfung mittels Standard-SQL-Klauseln (`JOIN`, `USING`), und anschließend die Anwendung von Filterung (`WHERE`), Aggregation (`GROUP BY`, `HAVING`) und Sortierung (`ORDER BY`) zur Datenanalyse. Die Fähigkeit, neue Tabellen im CAS-Speicher aus komplexen Abfragen zu erstellen, wird ebenso hervorgehoben wie die Interaktion mit anderen CAS-Tabellenaktionen wie `table.fetch`.
Datenanalyse

Type : INTERNE ERSTELLT


Die Beispiele verwenden intern generierte Daten (Datalines) für die Tabellen 'crime_data' und 'census_data', um jeden Codeblock eigenständig und ausführbar zu machen.

1 Codeblock
DATA STEP / FEDSQL.EXECDIRECT Data
Erklärung :
Dieser Code erstellt zwei temporäre CAS-Tabellen, `crime_data` und `census_data`, aus Inline-Daten. Anschließend wird `fedsql.execdirect` verwendet, um einen Join (`JOIN`) auf der Spalte `community_area` durchzuführen, um die Informationen beider Tabellen in einer neuen Tabelle namens `CrimeCensusBasique` zu kombinieren. Schließlich wird `table.fetch` verwendet, um die ersten fünf Zeilen der resultierenden Tabelle anzuzeigen.
Kopiert!
1* Connexion à CAS et chargement des données de démonstration;
2options cas convenient;
3caslib _all_ assign;
4 
5* Création de données de démonstration pour CRIME;
6DATA mycas.crime_data (promote=yes);
7 INFILE DATALINES dsd;
8 INPUT primary_type $ date :yymmdd10. community_area arrest $;
9 FORMAT date yymmdd10.;
10 DATALINES;
11"THEFT",2015-03-15,10,"FALSE"
12"BATTERY",2015-06-20,10,"TRUE"
13"THEFT",2015-04-01,15,"FALSE"
14"ASSAULT",2016-01-10,20,"TRUE"
15"THEFT",2015-08-01,10,"FALSE"
16"THEFT",2015-09-05,15,"TRUE"
17"THEFT",2015-10-10,20,"FALSE"
18"BATTERY",2016-02-01,10,"TRUE"
19"THEFT",2015-11-20,15,"FALSE"
20"ASSAULT",2015-12-25,20,"TRUE"
21"THEFT",2016-01-05,10,"FALSE"
22"THEFT",2016-01-15,10,"FALSE"
23"THEFT",2016-01-20,10,"FALSE"
24"THEFT",2016-01-25,10,"FALSE"
25"THEFT",2016-01-30,10,"FALSE"
26"THEFT",2016-01-01,15,"FALSE"
27"THEFT",2016-01-02,15,"FALSE"
28"THEFT",2016-01-03,15,"FALSE"
29"THEFT",2016-01-04,15,"FALSE"
30"THEFT",2016-01-05,15,"FALSE"
31;
32RUN;
33 
34* Création de données de démonstration pour CENSUS;
35DATA mycas.census_data (promote=yes);
36 INFILE DATALINES dsd;
37 INPUT community_area hardship_index per_capita_income;
38 DATALINES;
3910,50,30000
4015,70,20000
4120,30,45000
4225,90,15000
43;
44RUN;
45 
46PROC CAS;
47 fedsql.execdirect /
48 query="CREATE TABLE CrimeCensusBasique {options replace=true} AS
49 SELECT T1.primary_type, T1.date, T1.arrest,
50 T2.hardship_index, T2.per_capita_income, T1.community_area
51 FROM crime_data AS T1 JOIN census_data AS T2
52 ON T1.community_area = T2.community_area";
53RUN;
54 
55PROC CAS;
56 TABLE.fetch /
57 TABLE="CrimeCensusBasique"
58 to=5;
59RUN;
2 Codeblock
FEDSQL.EXECDIRECT
Erklärung :
Dieses Beispiel erweitert den Basisfall, indem es die Daten aus `CrimeCensusBasique` nach 'THEFT'-Verbrechen über einen bestimmten Zeitraum filtert. Anschließend werden die Ergebnisse nach Verbrechensart, Gemeindegebiet, Härteindex und Pro-Kopf-Einkommen aggregiert, wobei die Anzahl der Verbrechen gezählt wird. Nur Gruppen mit mindestens 2 Verbrechen werden berücksichtigt, und die Ergebnisse werden nach absteigender Anzahl der Verbrechen sortiert.
Kopiert!
1* Les données de démonstration et la table CrimeCensusBasique sont créées dans l'exemple 1;
2 
3PROC CAS;
4 fedsql.execdirect /
5 query="SELECT primary_type, COUNT(*) AS count_crimes,
6 community_area, hardship_index, per_capita_income
7 FROM CrimeCensusBasique
8 WHERE primary_type = 'THEFT' AND date BETWEEN '2015-01-01' AND '2016-12-31'
9 GROUP BY primary_type, community_area, hardship_index, per_capita_income
10 HAVING COUNT(*) >= 2
11 ORDER BY count_crimes DESC";
12RUN;
3 Codeblock
FEDSQL.EXECDIRECT
Erklärung :
Dieser Code demonstriert eine fortgeschrittenere FedSQL-Abfrage. Er verknüpft die Tabellen `crime_data` und `census_data` und wendet eine Filterbedingung auf `community_area` basierend auf einer Unterabfrage an: Es werden nur Gemeindegebiete mit einem `hardship_index` über 60 berücksichtigt. Zusätzlich wird eine neue Spalte `IncomeCategory` mithilfe einer `CASE`-Anweisung erstellt, um die Gebiete nach ihrem Pro-Kopf-Einkommen zu klassifizieren. `table.fetch` wird verwendet, um das Ergebnis zu visualisieren.
Kopiert!
1* Les données de démonstration sont créées dans l'exemple 1;
2 
3PROC CAS;
4 fedsql.execdirect /
5 query="CREATE TABLE CrimeCensusAvance {options replace=true} AS
6 SELECT T1.primary_type, T1.date, T1.arrest,
7 T2.hardship_index, T2.per_capita_income, T1.community_area,
8 CASE WHEN T2.per_capita_income > 35000 THEN 'High Income Area'
9 ELSE 'Low Income Area'
10 END AS IncomeCategory
11 FROM crime_data AS T1 JOIN census_data AS T2
12 ON T1.community_area = T2.community_area
13 WHERE T1.community_area IN (SELECT community_area FROM census_data WHERE hardship_index > 60)";
14RUN;
15 
16PROC CAS;
17 TABLE.fetch /
18 TABLE="CrimeCensusAvance"
19 to=5;
20RUN;
4 Codeblock
FEDSQL.EXECDIRECT / TABLE.FETCH
Erklärung :
Dieses Beispiel hebt die In-Memory-Verarbeitungsfähigkeiten von CAS hervor, indem es direkt eine Zusammenfassungstabelle (`SummaryCAS`) über `FEDSQL.EXECDIRECT` erstellt. Die Abfrage berechnet die Gesamtzahl der Verbrechen und das durchschnittliche Einkommen pro Gemeindegebiet. Anschließend wird die Aktion `TABLE.FETCH` verwendet, um die ersten 10 Zeilen dieser neuen Tabelle mit einer benutzerdefinierten Sortierung abzurufen und anzuzeigen, was eine nahtlose Integration zwischen FedSQL und CAS-Tabellenaktionen zur Analyse der Ergebnisse demonstriert.
Kopiert!
1* Les données de démonstration sont créées dans l'exemple 1;
2 
3PROC CAS;
4 fedsql.execdirect /
5 query="CREATE TABLE SummaryCAS {options replace=true} AS
6 SELECT primary_type, community_area, COUNT(*) AS TotalCrimes,
7 AVG(per_capita_income) AS AvgIncome
8 FROM crime_data AS T1 JOIN census_data AS T2
9 ON T1.community_area = T2.community_area
10 GROUP BY primary_type, community_area
11 HAVING TotalCrimes >= 2
12 ORDER BY TotalCrimes DESC, AvgIncome ASC";
13RUN;
14 
15* Afficher les 10 premières lignes de la table SummaryCAS, triées;
16PROC CAS;
17 TABLE.fetch /
18 TABLE="SummaryCAS"
19 to=10
20 sortby={{name="TotalCrimes", order="descending"}, {name="AvgIncome", order="ascending"}};
21RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.

Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.