diff -r 059fd2bbcfeb -r ae17db13569c relpipe-data/examples-in-sql-reading-sql.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/relpipe-data/examples-in-sql-reading-sql.xml Tue Oct 29 13:39:42 2019 +0100 @@ -0,0 +1,90 @@ + + + Reading SQL scripts + read an SQL file and display it in a tabular way + 03200 + + + +

+ SQL scripts containing + DDL (Data Definition Language) and DML (Data Manipulation Language) + contain both data structures (relations) and data (records). + Simple example: +

+ + + +

+ We can read such data using the relpipe-in-sql command + in a similar way we read CSV, XML or Recfile streams – just pipe the stream into the particular input filter + and let it convert data to the relational format: +

+ + + +

+ And in the next step we use an output filter and covert relational data to some other format e.g. the tabular output displayed in our terminal: +

+ + + + +

+ Of course, we can add further steps in our pipeline and use any transformation tool for filtering or modifying data: +

+ + + +

and get filtered output:

+ + +

+ However, it is usually not necessary, because once we have data in an in-memory database (which happens on-the-fly in the relpipe-in-sql step), + we can use the SQL language for filtering and transformations and get the same output as above: +

+ + + +

+ Actually, the relpipe-in-sql is just a symbolic link to the relpipe-tr-sql + and have the same capabilities (with just bit different default behavior to match general logic of the input filters). + So if we do not need special feautres of Guile, AWK or other transformation tool, it is better to stay with SQL (when we already use the SQL module). +

+ +

+ The difference between relpipe-tr-sql and relpipe-in-sql is that + the SQL input filter reads SQL scripts from the STDIN while the SQL transformation reads relational data from the STDIN. + And the input filter has implicit --copy '.*' option, if executed without any arguments (so it passes through all relations from the input without need of writing any SELECTs). + We can override this default behavior by using any argument – we can e.g. copy only certain relations using --copy 'a|c' (it is a regular expression for matching relation names) + or rename them: --copy-renamed 'a|c' 'copy_of_$0' or run arbitrary SELECT: --relation 'a' "SELECT * FROM …" as we have seen above. +

+ +

+ SQL scripts can be used for storing relational data as an alternative to other human-readable and human-editable text formats like XML, CSV or Recfiles. + And compared to the other formats, SQL scripts may contain even some logic (e.g. call SQL functions) or views. +

+ + +
+ +
\ No newline at end of file