Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę wydajnie odczytać ponad 15 milionów rekordów z SQL Server, wykonać pewne przetwarzanie i zapisać je do zwykłego pliku?

Wygląda na to, że sterownik jdbc dla serwera sql respektuje wskazówkę dotyczącą fetchsize (która sugeruje, ile wierszy należy jednocześnie odczytać), więc powinieneś być w stanie wykonać jedno zapytanie i iterować po zestawie wyników, przetwarzając i zapisując wiersze do pliku jako ty idź. Np.:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyczyścić (zapobiec wstrzyknięciu SQL) dynamiczny SQL w SQL Server?

  2. Jak mogę uzyskać sumę wielu wartości daty i godziny?

  3. Pomiń niektóre kolumny w SqlBulkCopy

  4. SQL Server — Usuń wszystkie niedrukowalne znaki ASCII

  5. Jak korzystać z wyszukiwania semantycznego w SQL Server