@@ -34,6 +34,7 @@ public final class CsvOptions extends FormatOptions {
3434 private final String fieldDelimiter ;
3535 private final String quote ;
3636 private final Long skipLeadingRows ;
37+ private final Boolean preserveAsciiControlCharacters ;
3738
3839 public static final class Builder {
3940
@@ -43,6 +44,7 @@ public static final class Builder {
4344 private String fieldDelimiter ;
4445 private String quote ;
4546 private Long skipLeadingRows ;
47+ private Boolean preserveAsciiControlCharacters ;
4648
4749 private Builder () {}
4850
@@ -53,6 +55,7 @@ private Builder(CsvOptions csvOptions) {
5355 this .fieldDelimiter = csvOptions .fieldDelimiter ;
5456 this .quote = csvOptions .quote ;
5557 this .skipLeadingRows = csvOptions .skipLeadingRows ;
58+ this .preserveAsciiControlCharacters = csvOptions .preserveAsciiControlCharacters ;
5659 }
5760
5861 /**
@@ -130,6 +133,15 @@ public Builder setSkipLeadingRows(long skipLeadingRows) {
130133 return this ;
131134 }
132135
136+ /**
137+ * Sets whether BigQuery should allow ascii control characters in a CSV file. By default ascii
138+ * control characters are not allowed.
139+ */
140+ public Builder setPreserveAsciiControlCharacters (boolean preserveAsciiControlCharacters ) {
141+ this .preserveAsciiControlCharacters = preserveAsciiControlCharacters ;
142+ return this ;
143+ }
144+
133145 /** Creates a {@code CsvOptions} object. */
134146 public CsvOptions build () {
135147 return new CsvOptions (this );
@@ -144,6 +156,7 @@ private CsvOptions(Builder builder) {
144156 this .fieldDelimiter = builder .fieldDelimiter ;
145157 this .quote = builder .quote ;
146158 this .skipLeadingRows = builder .skipLeadingRows ;
159+ this .preserveAsciiControlCharacters = builder .preserveAsciiControlCharacters ;
147160 }
148161
149162 /**
@@ -192,6 +205,14 @@ public Long getSkipLeadingRows() {
192205 return skipLeadingRows ;
193206 }
194207
208+ /**
209+ * Returns whether BigQuery should allow ascii control characters in a CSV file. By default ascii
210+ * control characters are not allowed.
211+ */
212+ public Boolean getPreserveAsciiControlCharacters () {
213+ return preserveAsciiControlCharacters ;
214+ }
215+
195216 /** Returns a builder for the {@code CsvOptions} object. */
196217 public Builder toBuilder () {
197218 return new Builder (this );
@@ -207,6 +228,7 @@ public String toString() {
207228 .add ("fieldDelimiter" , fieldDelimiter )
208229 .add ("quote" , quote )
209230 .add ("skipLeadingRows" , skipLeadingRows )
231+ .add ("preserveAsciiControlCharacters" , preserveAsciiControlCharacters )
210232 .toString ();
211233 }
212234
@@ -219,7 +241,8 @@ public int hashCode() {
219241 encoding ,
220242 fieldDelimiter ,
221243 quote ,
222- skipLeadingRows );
244+ skipLeadingRows ,
245+ preserveAsciiControlCharacters );
223246 }
224247
225248 @ Override
0 commit comments