forked from HiveRunner/HiveRunner
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInsertTestData.java
144 lines (118 loc) · 4.95 KB
/
InsertTestData.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/**
* Copyright (C) 2013-2018 Klarna AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.klarna.hiverunner.examples;
import com.klarna.hiverunner.HiveShell;
import com.klarna.hiverunner.StandaloneHiveRunner;
import com.klarna.hiverunner.annotations.HiveSQL;
import com.klarna.hiverunner.data.TsvFileParser;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.Arrays;
import java.util.List;
/*
This example is intended to be a small show case for some of the ways of setting up your test data in HiveRunner.
It will only print out some result and thus is not a strict unit test suite.
The examples will go through cases with adding test data from "code" or from file, and how you only need to supply
a selected subset of the columns or how to use more advanced features like files with custom separator characters
or custom NULL keywords in the test data files.
*/
@RunWith(StandaloneHiveRunner.class)
public class InsertTestData {
@Rule
public TestName name = new TestName();
@HiveSQL(files = {})
private HiveShell shell;
@Before
public void setupDatabase() {
shell.execute("CREATE DATABASE source_db");
shell.execute(new StringBuilder()
.append("CREATE TABLE source_db.test_table (")
.append("col_a STRING, col_b INT, col_c BOOLEAN")
.append(")")
.toString());
}
@Test
public void insertRowsFromCode() {
shell.insertInto("source_db", "test_table")
.withAllColumns()
.addRow("Value1", 1, true)
.addRow("Value2", 99, false)
.commit();
printResult(shell.executeStatement("select * from source_db.test_table"));
}
@Test
public void insertRowsFromCodeWithSelectedColumns() {
shell.insertInto("source_db", "test_table")
.withColumns("col_a", "col_c")
.addRow("Value1", true)
.addRow("Value2", false)
.commit();
printResult(shell.executeStatement("select * from source_db.test_table"));
}
@Test
public void insertRowsFromTsvFile() {
File dataFile = new File("src/test/resources/examples/data1.tsv");
shell.insertInto("source_db", "test_table")
.withAllColumns()
.addRowsFromTsv(dataFile)
.commit();
printResult(shell.executeStatement("select * from source_db.test_table"));
}
@Test
public void insertRowsFromTsvFileWithHeader() {
File dataFile = new File("src/test/resources/examples/dataWithHeader1.tsv");
TsvFileParser parser = new TsvFileParser().withHeader();
shell.insertInto("source_db", "test_table")
.addRowsFrom(dataFile, parser)
.commit();
printResult(shell.executeStatement("select * from source_db.test_table"));
}
@Test
public void insertRowsFromTsvFileWithSubsetHeader() {
File dataFile = new File("src/test/resources/examples/dataWithHeader2.tsv");
TsvFileParser parser = new TsvFileParser().withHeader();
shell.insertInto("source_db", "test_table")
.addRowsFrom(dataFile, parser)
.commit();
printResult(shell.executeStatement("select * from source_db.test_table"));
}
@Test
public void insertRowsIntoPartitionedTableStoredAsSequencefileWithCustomDelimiterAndNullValue() {
File dataFile = new File("src/test/resources/examples/data2.tsv");
shell.execute(new StringBuilder()
.append("CREATE TABLE source_db.test_table2 (")
.append("col_a STRING, col_b INT")
.append(")")
.append("partitioned by (col_c string)")
.append("stored as SEQUENCEFILE")
.toString());
shell.insertInto("source_db", "test_table2")
.withAllColumns()
.addRowsFrom(dataFile, new TsvFileParser().withDelimiter(":").withNullValue("__NULL__"))
.commit();
printResult(shell.executeStatement("select * from source_db.test_table2"));
}
public void printResult(List<Object[]> result) {
System.out.println(String.format("Result from %s:",name.getMethodName()));
for (Object[] row : result) {
System.out.println(Arrays.asList(row));
}
}
}