HfWU - Datenexport und -import mit awk
Stichworte Todos Linux Skript:
- Sonderzeichen austauschen bzw. escapen (,-> chr(44) ; Zeilenumbruch - > chr(10); "
Datensätze aus phpmyadmin als csv Exportieren z.B. mit CSV-Optionen Felder getrennt mit ~ Felder eingeschlossen von~ Felder escaped von\
In Open Office importieren und Zeilenwechsel mit
ersetzen (in Inhalten) ansonsten entfernen.
Ersetzung mit reg. Expr und \n
Zeilen getrennt mit
- recode ISO_8859-1..utf-8
- Tabelle mit den Feldern anlegen (tblFields)
Zeilenumbrüche mit reg. Ausdruck rausschmeißen
Problemstellung:[Bearbeiten]
Export von Datenstrukturen aus Infosite (z.B. Personallisten) und -import bzw. Konvertierung in vorgegebene Datenstruktur im Typo3. Problematisch ist insbesondere, daß die Datenfelder (Adresse, Name...) nicht wie gewohnt in Tabellenspalten liegen sondern selbst wieder Datensätze in Tabellen sind.
Allgemeines Vorgehen:[Bearbeiten]
- Neue Datenbankstruktur prinzipiell planen & aufbauen.
- Generierung von SQL - Abfragen auf die Infosite Datenbank um die Daten in einer Tabelle zu haben - d.h. Spaltennamen (Feldnamen) und Werte liegen in jeweils einer Zeile (=ein Datensatz) Als Hilfe zum Testen der SQL Abfragen kommt die Extension wfqbe_dbquery zum Einsatz.
- Abfrage ausführen, Export in .csv Datei (manuell)
- Auslesen aller vorhandenen Felder und erzeugen einer SQL-Datei die die gefundenen Felder als Spaltennamen einer neuen Tabelle erzeugt.
- awk-Skript zum Auslesen der vorhanden Felder und Generierung eines sql - Files mit den Notwendigen Statements zum erzeugen der DB-Felder
- Erstellen der Tabelle (evt. von Hand manipulieren)
- awk-Skript zum Auslesen aller uids und generieren eines insert-uid.sql Files
- Erstellen der Datensätze (nur die uids, alle anderen Felder sind leer)
- awk-Skript zum Updaten der Datensätze mit den restlichen Daten (dazu die uids für den where Clause nutzen) -> update.sql
- Ausführen dieses Datensatzes
--- Mitschrieb:
awk -F "#" '{print $2}' results.csv | sort | uniq | grep "SP" | awk '{print $1,"VARCHAR(255)",",\\"}' > insert.sql
-F gibt den Feldtrenner # an, Spalte2 aus results.csv ausgeben | sortieren | doppelte raus | nur die mit SP (Felder)
dann noch manuell create table addr_temp ( und am ende ) eingefügt
Komma am Ende der letzten Zeile löschen: sed '$ s/,//' personal.sql > personal1.sql
Komplettes Skript:
rpl -q "'" "" personaldb3.csv
awk -F "$" '{print $2}' personaldb3.csv | sort | uniq | grep "SP" | awk '{print $1,"VARCHAR(255)",","}' > insert.sql
echo "CREATE TABLE personal (" > personal.sql
cat insert.sql >> personal.sql
sed '$ s/,//' personal.sql > personal1.sql
echo ");" >> personal1.sql
Abfrage der Personalien
SELECT anm_anmeldung.arbeitsgr_ID, tpl_feld_in_seite.feldname, tpl_feld_in_seite.feldinhalt, anm_anmeldung.seiten_location FROM ( anm_anmeldung JOIN tpl_feld_in_seite ON anm_anmeldung.anmeldung_ID = tpl_feld_in_seite.seiten_ID ) WHERE anm_anmeldung.arbeitsgr_ID IN ( 1227,1226,1228,1230,1229,1225,1224,2112 )
Abfrage von allen Personalbildern
SELECT anm_anmeldung.seiten_location, tpl_feld_in_seite.seiten_ID FROM ( anm_anmeldung JOIN tpl_feld_in_seite ON anm_anmeldung.anmeldung_ID = tpl_feld_in_seite.feldurl ) WHERE tpl_feld_in_seite.feldname LIKE 'SP_BILD_D'
Einfügen der Bilder in die Personaltabelle (vorher Spalte image anlegen)
update personaldb4,personalbildtmp set personaldb4.image = personalbildtmp.image where personalbildtmp.uid = personaldb4.uid
SCHLAGWORTE PERSONAL
Über SQL alle Schlagworte zum Pool 69 (Personal) + Name
SELECT swp_sw_in_swp.schlagwort_ID, sw_schlagworte.name FROM ( swp_sw_in_swp JOIN sw_schlagworte ON swp_sw_in_swp.schlagwort_ID = sw_schlagworte.schlagwort_ID ) WHERE swp_sw_in_swp.sw_pool_ID = 69
Gefundene Schlagworte in eigene Typo Tabelle (über csv Export - Import)
alter table addr_temp uid varchar(255);
sort -n -t# +3 results1.csv
rpl "sp_auto_" "" results1.csv
awk -F "#" '{print "insert into addr_tmp uid values "$4}' results1.csv | sort | uniq
awk -F "#" {'print "update addr_temp SET "$2 "=\""$3"\"" " where uid=\""$4 "\" ;"}' results1.csv > update_values.sql