sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik efficiënt 15+ miljoen records uit SQL Server lezen, wat verwerken en ze naar een plat bestand schrijven?

Het lijkt erop dat het jdbc-stuurprogramma voor sql-server de fetchsize-hint respecteert (die suggereert hoeveel rijen er tegelijk moeten worden gelezen), dus je zou in staat moeten zijn om één query uit te voeren en je resultatenset te doorlopen, rijen te verwerken en naar het bestand te schrijven als jij gaat. Bijv.:

public static void toFlat(Connection conn, File file, String destcode) {
    PreparedStatement ps = null;
    ResultSet rs = null;
    BufferedWriter out = null;
    try {
        ps = conn.prepareStatement(
            // col#:   1         2         3           4
            "SELECT threatid, lastname, firstname, flightnum " +
            "FROM travel.passengers " +
            "JOIN threats.aliases USING (firstname, lastname) " +
            "WHERE destination = ?" // param# 1
        );
        ps.setString(1,destcode); // param# 1

        out = new BufferedWriter(new FileWriter(file));


        // provides hint for driver to load x rows at a time:
        ps.setFetchSize(1000); 
        ps.executeQuery();
        rs = ps.getResultSet();

        while(rs.next()) {
            Integer threatid = rs.getInt(1);
            String lastname = rs.getString(2);
            String firstname = rs.getString(3);
            Integer flightnum = rs.getInt(4);

            //rubber meets road:
            String row = processRow(threatid, lastname, firstname, flightnum);
            out.write(row);
        }
    } catch(SQLException e) {
        // TODO
    } catch (IOException e) {
        // TODO
        e.printStackTrace();
    } finally {
        try {
            ps.close();
        } catch(Exception e){
            //TODO
        }
        try {
            rs.close();
        } catch(Exception e){
            //TODO
        }
        try {
            out.close();
        } catch(Exception e){
            //TODO
        }
    }
}


  1. Waarom dml-foutregistratie genegeerd in parallelle instructie

  2. Hoe een schema door meerdere gebruikers te gebruiken zonder de schemanaam voor de objecten vooraf te fixeren?

  3. Waarom vertelt MySQL Workbench me dat ik een puntkomma nodig heb?

  4. Passende SQL-serverindex voor alleen invoegen schema