mirror of
https://github.com/apache/sqoop.git
synced 2025-05-12 23:11:43 +08:00
SQOOP-1405: Add arg to enable SQL Server identity insert on export
This commit is contained in:
parent
11b1c91739
commit
c859a5a15d
@ -125,6 +125,8 @@ List of all extra arguments supported by Microsoft SQL Connector is shown below:
|
|||||||
`----------------------------------------`---------------------------------------
|
`----------------------------------------`---------------------------------------
|
||||||
Argument Description
|
Argument Description
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
|
+\--identity-insert Set IDENTITY_INSERT to ON before \
|
||||||
|
export insert.
|
||||||
+\--non-resilient+ Don't attempt to recover failed \
|
+\--non-resilient+ Don't attempt to recover failed \
|
||||||
export operations.
|
export operations.
|
||||||
+\--schema <name>+ Scheme name that sqoop should use. \
|
+\--schema <name>+ Scheme name that sqoop should use. \
|
||||||
@ -133,6 +135,15 @@ Argument Description
|
|||||||
data movement.
|
data movement.
|
||||||
---------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Allow identity inserts
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
You can allow inserts on columns that have identity. For example:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ sqoop export ... --export-dir custom_dir --table custom_table -- --identity-insert
|
||||||
|
----
|
||||||
|
|
||||||
Non-resilient operations
|
Non-resilient operations
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -60,6 +60,11 @@ public class SQLServerManager
|
|||||||
// Option set in extra-arguments to disable resiliency and use default mode
|
// Option set in extra-arguments to disable resiliency and use default mode
|
||||||
public static final String NON_RESILIENT_OPTION = "non-resilient";
|
public static final String NON_RESILIENT_OPTION = "non-resilient";
|
||||||
|
|
||||||
|
// Option to allow inserts on identity columns
|
||||||
|
public static final String IDENTITY_INSERT = "identity-insert";
|
||||||
|
public static final String IDENTITY_INSERT_PROP =
|
||||||
|
"org.apache.sqoop.manager.sqlserver.table.identity";
|
||||||
|
|
||||||
// driver class to ensure is loaded when making db connection.
|
// driver class to ensure is loaded when making db connection.
|
||||||
private static final String DRIVER_CLASS =
|
private static final String DRIVER_CLASS =
|
||||||
"com.microsoft.sqlserver.jdbc.SQLServerDriver";
|
"com.microsoft.sqlserver.jdbc.SQLServerDriver";
|
||||||
@ -77,6 +82,11 @@ public class SQLServerManager
|
|||||||
*/
|
*/
|
||||||
private String tableHints;
|
private String tableHints;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to allow identity inserts.
|
||||||
|
*/
|
||||||
|
private boolean identityInserts;
|
||||||
|
|
||||||
public SQLServerManager(final SqoopOptions opts) {
|
public SQLServerManager(final SqoopOptions opts) {
|
||||||
super(DRIVER_CLASS, opts);
|
super(DRIVER_CLASS, opts);
|
||||||
|
|
||||||
@ -159,6 +169,10 @@ public void exportTable(com.cloudera.sqoop.manager.ExportJobContext context)
|
|||||||
if (tableHints != null) {
|
if (tableHints != null) {
|
||||||
configuration.set(TABLE_HINTS_PROP, tableHints);
|
configuration.set(TABLE_HINTS_PROP, tableHints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Propagate whether to allow identity inserts to job
|
||||||
|
configuration.setBoolean(IDENTITY_INSERT_PROP, identityInserts);
|
||||||
|
|
||||||
JdbcExportJob exportJob;
|
JdbcExportJob exportJob;
|
||||||
if (isNonResilientOperation()) {
|
if (isNonResilientOperation()) {
|
||||||
exportJob = new JdbcExportJob(context, null, null,
|
exportJob = new JdbcExportJob(context, null, null,
|
||||||
@ -286,6 +300,8 @@ void parseExtraArgs(String[] args) throws ParseException {
|
|||||||
|
|
||||||
this.tableHints = hints;
|
this.tableHints = hints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
identityInserts = cmdLine.hasOption(IDENTITY_INSERT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -307,6 +323,10 @@ private RelatedOptions getExtraOptions() {
|
|||||||
.withDescription("Optional table hints to use")
|
.withDescription("Optional table hints to use")
|
||||||
.withLongOpt(TABLE_HINTS).create());
|
.withLongOpt(TABLE_HINTS).create());
|
||||||
|
|
||||||
|
extraOptions.addOption(OptionBuilder
|
||||||
|
.withDescription("Allow identity inserts")
|
||||||
|
.withLongOpt(IDENTITY_INSERT).create());
|
||||||
|
|
||||||
return extraOptions;
|
return extraOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,6 +123,11 @@ protected void executeStatement(PreparedStatement stmt,
|
|||||||
protected String getInsertStatement(int numRows) {
|
protected String getInsertStatement(int numRows) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
if (getConf().getBoolean(SQLServerManager.IDENTITY_INSERT_PROP, false)) {
|
||||||
|
LOG.info("Enabling identity inserts");
|
||||||
|
sb.append("SET IDENTITY_INSERT ").append(tableName).append(" ON ");
|
||||||
|
}
|
||||||
|
|
||||||
sb.append("INSERT INTO " + tableName + " ");
|
sb.append("INSERT INTO " + tableName + " ");
|
||||||
|
|
||||||
String tableHints = getConf().get(SQLServerManager.TABLE_HINTS_PROP);
|
String tableHints = getConf().get(SQLServerManager.TABLE_HINTS_PROP);
|
||||||
|
@ -62,6 +62,11 @@ public SqlServerExportBatchRecordWriter(TaskAttemptContext context)
|
|||||||
protected String getInsertStatement(int numRows) {
|
protected String getInsertStatement(int numRows) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
if (getConf().getBoolean(SQLServerManager.IDENTITY_INSERT_PROP, false)) {
|
||||||
|
LOG.info("Enabling identity inserts");
|
||||||
|
sb.append("SET IDENTITY_INSERT ").append(tableName).append(" ON ");
|
||||||
|
}
|
||||||
|
|
||||||
sb.append("INSERT INTO " + tableName + " ");
|
sb.append("INSERT INTO " + tableName + " ");
|
||||||
|
|
||||||
String tableHints = getConf().get(SQLServerManager.TABLE_HINTS_PROP);
|
String tableHints = getConf().get(SQLServerManager.TABLE_HINTS_PROP);
|
||||||
|
Loading…
Reference in New Issue
Block a user