Snowflake Time Travel Notes

0


SELECT ... FROM ... { AT( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id -->Query ID> } ) | BEFORE( STATEMENT => <id> ) }  

  • AT keyword specifies that the request is inclusive of any changes made by a statement or transaction with timestamp equal to the specified parameter.

  • BEFORE keyword specifies that the request refers to a point immediately preceding the specified parameter.


Example: Select historical data from a table as of 5 minutes ago:

Create table test_time_travel(data string,inserted_time timestamp)


Select current_timestamp,LOCALTIMESTAMP,SYSDATE(),CURRENT_REGION()
 

insert into test_time_travel values ('First Row', SYSDATE())

insert into test_time_travel values ('Second Row', SYSDATE())

insert into test_time_travel values ('Third Row', SYSDATE())

Select * from test_time_travel at(offset => -60*5)

Simple Mule API SPEC (MULESOFT 101)

0
 API.raml

#%RAML 1.0
title: Accounts API 

types:
  AccountType: !include /AccountDataType.raml

/accounts:
  get:
    queryParameters:
      type:
        required: true
        enum:
          - personal 
          - business
      name:
        required: false
      country:
        required: false
    
    responses:
      200:
        body:
          application/json:
            type: AccountType[]
            examples:
              output: !include /AccountExample.raml

Datatype.raml

#%RAML 1.0 DataType

type: object
properties:
  id: string
  firstName: string
  lastName: string
  type: string


Example.raml

#%RAML 1.0 NamedExample
value:
  - 
    id: A100
    firstName: Ashif
    lastName: Ahamed
    type: Personal



--
 Ashif Ahamed . A



Converting Base64 Encoded String(Generated from a File) to File using Java

0

package basics;
import java.io.FileOutputStream;
import java.util.Base64;
import java.util.Base64.Decoder;
public class EncodedStringToFile {

public static void main(String[] args) {
try{
String encodedString="b29nbGUgTExDWzVdIGlzIGFuIEFtZXJpY2FuIG11bHRpbmF0aW9uYWwgdGVjaG5vbG9neSBjb21wYW55IHRoYXQgc3BlY2lhbGl6ZXMgaW4gSW50ZXJuZXQtcmVsYXRlZCBzZXJ2aWNlcyBhbmQgcHJvZHVjdHMsIHdoaWNoIGluY2x1ZGUgb25saW5lIGFkdmVydGlzaW5nIHRlY2hub2xvZ2llcywgc2VhcmNoIGVuZ2luZSwgY2xvdWQgY29tcHV0aW5nLCBzb2Z0d2FyZSwgYW5kIGhhcmR3YXJlLiBHb29nbGUgd2FzIGZvdW5kZWQgaW4gMTk5OCBieSBMYXJyeSBQYWdlIGFuZCBTZXJnZXkgQnJpbiB3aGlsZSB0aGV5IHdlcmUgUGguRC4gc3R1ZGVudHMgYXQgU3RhbmZvcmQgVW5pdmVyc2l0eSBpbiBDYWxpZm9ybmlhLiBUb2dldGhlciB0aGV5IG93biBhYm91dCAxNCBwZXJjZW50IG9mIGl0cyBzaGFyZXMgYW5kIGNvbnRyb2wgNTYgcGVyY2VudCBvZiB0aGUgc3RvY2tob2xkZXIgdm90aW5nIHBvd2VyIHRocm91Z2ggc3VwZXJ2b3Rpbmcgc3RvY2suIFRoZXkgaW5jb3Jwb3JhdGVkIEdvb2dsZSBhcyBhIHByaXZhdGVseSBoZWxkIGNvbXBhbnkgb24gU2VwdGVtYmVyIDQsIDE5OTguIEFuIGluaXRpYWwgcHVibGljIG9mZmVyaW5nIChJUE8pIHRvb2sgcGxhY2Ugb24gQXVndXN0IDE5LCAyMDA0LCBhbmQgR29vZ2xlIG1vdmVkIHRvIGl0cyBoZWFkcXVhcnRlcnMgaW4gTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSwgbmlja25hbWVkIHRoZSBHb29nbGVwbGV4LiBJbiBBdWd1c3QgMjAxNSwgR29vZ2xlIGFubm91bmNlZCBwbGFucyB0byByZW9yZ2FuaXplIGl0cyB2YXJpb3VzIGludGVyZXN0cyBhcyBhIGNvbmdsb21lcmF0ZSBjYWxsZWQgQWxwaGFiZXQgSW5jLiBHb29nbGUgaXMgQWxwaGFiZXQncyBsZWFkaW5nIHN1YnNpZGlhcnkgYW5kIHdpbGwgY29udGludWUgdG8gYmUgdGhlIHVtYnJlbGxhIGNvbXBhbnkgZm9yIEFscGhhYmV0J3MgSW50ZXJuZXQgaW50ZXJlc3RzLiBTdW5kYXIgUGljaGFpIHdhcyBhcHBvaW50ZWQgQ0VPIG9mIEdvb2dsZSwgcmVwbGFjaW5nIExhcnJ5IFBhZ2Ugd2hvIGJlY2FtZSB0aGUgQ0VPIG9mIEFscGhhYmV0LiBUaGUgY29tcGFueSdzIHJhcGlkIGdyb3d0aCBzaW5jZSBpbmNvcnBvcmF0aW9uIGhhcyB0cmlnZ2VyZWQgYSBjaGFpbiBvZiBwcm9kdWN0cywgYWNxdWlzaXRpb25zLCBhbmQgcGFydG5lcnNoaXBzIGJleW9uZCBHb29nbGUncyBjb3JlIHNlYXJjaCBlbmdpbmUgKEdvb2dsZSBTZWFyY2gpLiBJdCBvZmZlcnMgc2VydmljZXMgZGVzaWduZWQgZm9yIHdvcmsgYW5kIHByb2R1Y3Rpdml0eSAoR29vZ2xlIERvY3MsIEdvb2dsZSBTaGVldHMsIGFuZCBHb29nbGUgU2xpZGVzKSwgZW1haWwgKEdtYWlsL0luYm94KSwgc2NoZWR1bGluZyBhbmQgdGltZSBtYW5hZ2VtZW50IChHb29nbGUgQ2FsZW5kYXIpLCBjbG91ZCBzdG9yYWdlIChHb29nbGUgRHJpdmUpLCBzb2NpYWwgbmV0d29ya2luZyAoR29vZ2xlKyksIGluc3RhbnQgbWVzc2FnaW5nIGFuZCB2aWRlbyBjaGF0IChHb29nbGUgQWxsbywgRHVvLCBIYW5nb3V0cyksIGxhbmd1YWdlIHRyYW5zbGF0aW9uIChHb29nbGUgVHJhbnNsYXRlKSwgbWFwcGluZyBhbmQgbmF2aWdhdGlvbiAoR29vZ2xlIE1hcHMsIFdhemUsIEdvb2dsZSBFYXJ0aCwgU3RyZWV0IFZpZXcpLCB2aWRlbyBzaGFyaW5nIChZb3VUdWJlKSwgbm90ZS10YWtpbmcgKEdvb2dsZSBLZWVwKSwgYW5kIHBob3RvIG9yZ2FuaXppbmcgYW5kIGVkaXRpbmcgKEdvb2dsZSBQaG90b3MpLiBUaGUgY29tcGFueSBsZWFkcyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIEFuZHJvaWQgbW9iaWxlIG9wZXJhdGluZyBzeXN0ZW0sIHRoZSBHb29nbGUgQ2hyb21lIHdlYiBicm93c2VyLCBhbmQgQ2hyb21lIE9TLCBhIGxpZ2h0d2VpZ2h0IG9wZXJhdGluZyBzeXN0ZW0gYmFzZWQgb24gdGhlIENocm9tZSBicm93c2VyLiBHb29nbGUgaGFzIG1vdmVkIGluY3JlYXNpbmdseSBpbnRvIGhhcmR3YXJlOyBmcm9tIDIwMTAgdG8gMjAxNSwgaXQgcGFydG5lcmVkIHdpdGggbWFqb3IgZWxlY3Ryb25pY3MgbWFudWZhY3R1cmVycyBpbiB0aGUgcHJvZHVjdGlvbiBvZiBpdHMgTmV4dXMgZGV2aWNlcywgYW5kIGl0IHJlbGVhc2VkIG11bHRpcGxlIGhhcmR3YXJlIHByb2R1Y3RzIGluIE9jdG9iZXIgMjAxNiwgaW5jbHVkaW5nIHRoZSBHb29nbGUgUGl4ZWwgc21hcnRwaG9uZSwgR29vZ2xlIEhvbWUgc21hcnQgc3BlYWtlciwgR29vZ2xlIFdpZmkgbWVzaCB3aXJlbGVzcyByb3V0ZXIsIGFuZCBHb29nbGUgRGF5ZHJlYW0gdmlydHVhbCByZWFsaXR5IGhlYWRzZXQuIEdvb2dsZSBoYXMgYWxzbyBleHBlcmltZW50ZWQgd2l0aCBiZWNvbWluZyBhbiBJbnRlcm5ldCBjYXJyaWVyLiBJbiBGZWJydWFyeSAyMDEwLCBpdCBhbm5vdW5jZWQgR29vZ2xlIEZpYmVyLCBhIGZpYmVyLW9wdGljIGluZnJhc3RydWN0dXJlIHRoYXQgd2FzIGluc3RhbGxlZCBpbiBLYW5zYXMgQ2l0eTsgaW4gQXByaWwgMjAxNSwgaXQgbGF1bmNoZWQgUHJvamVjdCBGaSBpbiB0aGUgVW5pdGVkIFN0YXRlcywgY29tYmluaW5nIFdpLUZpIGFuZCBjZWxsdWxhciBuZXR3b3JrcyBmcm9tIGRpZmZlcmVudCBwcm92aWRlcnM7IGFuZCBpbiAyMDE2LCBpdCBhbm5vdW5jZWQgdGhlIEdvb2dsZSBTdGF0aW9uIGluaXRpYXRpdmUgdG8gbWFrZSBwdWJsaWMgV2ktRmkgYXZhaWxhYmxlIGFyb3VuZCB0aGUgd29ybGQsIHdpdGggaW5pdGlhbCBkZXBsb3ltZW50IGluIEluZGlhLls2XUFsZXhhIEludGVybmV0IG1vbml0b3JzIGNvbW1lcmNpYWwgd2ViIHRyYWZmaWMgYW5kIGxpc3RzIEdvb2dsZS5jb20gYXMgdGhlIG1vc3QgdmlzaXRlZCB3ZWJzaXRlIGluIHRoZSB3b3JsZC4gU2V2ZXJhbCBvdGhlciBHb29nbGUgc2VydmljZXMgYWxzbyBmaWd1cmUgaW4gdGhlIHRvcCAxMDAgbW9zdCB2aXNpdGVkIHdlYnNpdGVzLCBpbmNsdWRpbmcgWW91VHViZSBhbmQgQmxvZ2dlci4gR29vZ2xlIGlzIHRoZSBtb3N0IHZhbHVhYmxlIGJyYW5kIGluIHRoZSB3b3JsZCBhcyBvZiAyMDE3LFs3XSBidXQgaGFzIHJlY2VpdmVkIHNpZ25pZmljYW50IGNyaXRpY2lzbSBpbnZvbHZpbmcgaXNzdWVzIHN1Y2ggYXMgcHJpdmFjeSBjb25jZXJucywgdGF4IGF2b2lkYW5jZSwgYW50aXRydXN0LCBjZW5zb3JzaGlwLCBhbmQgc2VhcmNoIG5ldXRyYWxpdHkuIEdvb2dsZSdzIG1pc3Npb24gc3RhdGVtZW50IGlzICJ0byBvcmdhbml6ZSB0aGUgd29ybGQncyBpbmZvcm1hdGlvbiBhbmQgbWFrZSBpdCB1bml2ZXJzYWxseSBhY2Nlc3NpYmxlIGFuZCB1c2VmdWwiLCBhbmQgaXRzIHVub2ZmaWNpYWwgc2xvZ2FuIHdhcyAiRG9uJ3QgYmUgZXZpbCIuIEluIE9jdG9iZXIgMjAxNSwgdGhlIG1vdHRvIHdhcyByZXBsYWNlZCBpbiB0aGUgQWxwaGFiZXQgY29ycG9yYXRlIGNvZGUgb2YgY29uZHVjdCBieSB0aGUgcGhyYXNlICJEbyB0aGUgcmlnaHQgdGhpbmciLCB3aGlsZSB0aGUgb3JpZ2luYWwgb25lIHdhcyByZXRhaW5lZCBpbiB0aGUgY29kZSBvZiBjb25kdWN0IG9mIEdvb2dsZS5bOF0gQXJvdW5kIE1heSAyMDE4LCB0aGUgc2xvZ2FuIHdhcyBzaWxlbnRseSByZW1vdmVkIGZyb20gdGhlIGNvZGUncyBjbGF1c2VzLCBsZWF2aW5nIG9ubHkgb25lIGdlbmVyaWMgcmVmZXJlbmNlIGluIGl0cyBsYXN0IHBhcmFncmFwaC5bOV0=";
Decoder decoder = Base64.getMimeDecoder();
byte[] decodedBytes = decoder.decode(encodedString);
FileOutputStream fout=new FileOutputStream("e:\\TalendOut"+"_.csv");
fout.write(decodedBytes);  
        fout.close();
        System.out.println("Converted Encoded String to File");

}
catch (Exception e) {e.printStackTrace();  }
}


}


PS: Converted file into Base64 String using https://base64.guru/converter/encode/file




 

Uploading and Downloading Files( Binary Data) in DB

0


Converting File into Binary and Inserting into DB 

package basics;


import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Main {
  static String url = "jdbc:oracle:thin:@localhost:1521:Oracle12c";
  static String username = "data";
  static String password = "xxxxxx";

  public static void main(String[] args) throws Exception {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection(url, username, password);
    conn.setAutoCommit(false);

    String sql = "INSERT INTO documentuploads(name, description, doc_name) VALUES (?, ?, ?)";
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setString(1, "my.xlsm");
    stmt.setString(2, "Excel File");

    File image = new File("C:\\Users\\XXXX\\Documents\\New_ID_BMM_PCMT-GCW_WORKBOOK_Name.xlsm");
    FileInputStream   fis = new FileInputStream(image);
    stmt.setBinaryStream(3, fis, (int) image.length());
    stmt.execute();

    conn.commit();
    fis.close();
    conn.close();
    System.out.println("OkOk");
  }
}


Retrieving Blob and Converting to File:

package basics;
import java.sql.*;  
import java.io.*;  
public class RetrieveImage {

public static void main(String[] args) {
try{  
Class.forName("oracle.jdbc.driver.OracleDriver");  
Connection con=DriverManager.getConnection(  
"jdbc:oracle:thin:@localhost:1521:Oracle12c","data","xxxxx");  
     
PreparedStatement ps=con.prepareStatement("select * from documentuploads where name='From Talend'");  
ResultSet rs=ps.executeQuery();  
int i=1;
while (rs.next()){
             
Blob b=rs.getBlob(3);   // third column
byte barr[]=b.getBytes(1,(int)b.length());  
             
FileOutputStream fout=new FileOutputStream("e:\\TalendOut"+i+"_.jpg");  
fout.write(barr);  
             
fout.close();  
i++;
}//end of if  
System.out.println("ok");  
             
con.close();  
}catch (Exception e) {e.printStackTrace();  }  

}

}


Converting File to Byte Array :

 package basics ;
 public class FileRead {
 
public static byte[] ByteArrayFromFile(String filepath) {
try{
java.io.File file=new java.io.File(filepath);
java.io.FileInputStream fis = new java.io.FileInputStream(file);
int fileLength = (int) file.length();
byte[] incoming_file_data = new byte[fileLength]; // allocate byte array of right size
fis.read(incoming_file_data, 0, fileLength ); // read into byte array
fis.close();
return incoming_file_data;
}catch(Exception err){
err.printStackTrace();return null;
}
}
}