hive_tests.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # Licensed to the Apache Software Foundation (ASF) under one
  2. # or more contributor license agreements. See the NOTICE file
  3. # distributed with this work for additional information
  4. # regarding copyright ownership. The ASF licenses this file
  5. # to you under the Apache License, Version 2.0 (the
  6. # "License"); you may not use this file except in compliance
  7. # with the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing,
  12. # software distributed under the License is distributed on an
  13. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  14. # KIND, either express or implied. See the License for the
  15. # specific language governing permissions and limitations
  16. # under the License.
  17. from unittest import mock
  18. from superset.db_engine_specs.hive import HiveEngineSpec
  19. from tests.db_engine_specs.base_tests import DbEngineSpecTestCase
  20. class HiveTests(DbEngineSpecTestCase):
  21. def test_0_progress(self):
  22. log = """
  23. 17/02/07 18:26:27 INFO log.PerfLogger: <PERFLOG method=compile from=org.apache.hadoop.hive.ql.Driver>
  24. 17/02/07 18:26:27 INFO log.PerfLogger: <PERFLOG method=parse from=org.apache.hadoop.hive.ql.Driver>
  25. """.split(
  26. "\n"
  27. )
  28. self.assertEqual(0, HiveEngineSpec.progress(log))
  29. def test_number_of_jobs_progress(self):
  30. log = """
  31. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  32. """.split(
  33. "\n"
  34. )
  35. self.assertEqual(0, HiveEngineSpec.progress(log))
  36. def test_job_1_launched_progress(self):
  37. log = """
  38. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  39. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2
  40. """.split(
  41. "\n"
  42. )
  43. self.assertEqual(0, HiveEngineSpec.progress(log))
  44. def test_job_1_launched_stage_1(self):
  45. log = """
  46. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  47. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2
  48. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0%
  49. """.split(
  50. "\n"
  51. )
  52. self.assertEqual(0, HiveEngineSpec.progress(log))
  53. def test_job_1_launched_stage_1_map_40_progress(
  54. self
  55. ): # pylint: disable=invalid-name
  56. log = """
  57. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  58. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2
  59. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0%
  60. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0%
  61. """.split(
  62. "\n"
  63. )
  64. self.assertEqual(10, HiveEngineSpec.progress(log))
  65. def test_job_1_launched_stage_1_map_80_reduce_40_progress(
  66. self
  67. ): # pylint: disable=invalid-name
  68. log = """
  69. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  70. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2
  71. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0%
  72. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0%
  73. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 80%, reduce = 40%
  74. """.split(
  75. "\n"
  76. )
  77. self.assertEqual(30, HiveEngineSpec.progress(log))
  78. def test_job_1_launched_stage_2_stages_progress(
  79. self
  80. ): # pylint: disable=invalid-name
  81. log = """
  82. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  83. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2
  84. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0%
  85. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0%
  86. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 80%, reduce = 40%
  87. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-2 map = 0%, reduce = 0%
  88. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 100%, reduce = 0%
  89. """.split(
  90. "\n"
  91. )
  92. self.assertEqual(12, HiveEngineSpec.progress(log))
  93. def test_job_2_launched_stage_2_stages_progress(
  94. self
  95. ): # pylint: disable=invalid-name
  96. log = """
  97. 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2
  98. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2
  99. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 100%, reduce = 0%
  100. 17/02/07 19:15:55 INFO ql.Driver: Launching Job 2 out of 2
  101. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0%
  102. 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0%
  103. """.split(
  104. "\n"
  105. )
  106. self.assertEqual(60, HiveEngineSpec.progress(log))
  107. def test_hive_error_msg(self):
  108. msg = (
  109. '{...} errorMessage="Error while compiling statement: FAILED: '
  110. "SemanticException [Error 10001]: Line 4"
  111. ":5 Table not found 'fact_ridesfdslakj'\", statusCode=3, "
  112. "sqlState='42S02', errorCode=10001)){...}"
  113. )
  114. self.assertEqual(
  115. (
  116. "hive error: Error while compiling statement: FAILED: "
  117. "SemanticException [Error 10001]: Line 4:5 "
  118. "Table not found 'fact_ridesfdslakj'"
  119. ),
  120. HiveEngineSpec.extract_error_message(Exception(msg)),
  121. )
  122. e = Exception("Some string that doesn't match the regex")
  123. self.assertEqual(f"hive error: {e}", HiveEngineSpec.extract_error_message(e))
  124. msg = (
  125. "errorCode=10001, "
  126. 'errorMessage="Error while compiling statement"), operationHandle'
  127. '=None)"'
  128. )
  129. self.assertEqual(
  130. ("hive error: Error while compiling statement"),
  131. HiveEngineSpec.extract_error_message(Exception(msg)),
  132. )
  133. def test_hive_get_view_names_return_empty_list(
  134. self
  135. ): # pylint: disable=invalid-name
  136. self.assertEqual(
  137. [], HiveEngineSpec.get_view_names(mock.ANY, mock.ANY, mock.ANY)
  138. )
  139. def test_convert_dttm(self):
  140. dttm = self.get_dttm()
  141. self.assertEqual(
  142. HiveEngineSpec.convert_dttm("DATE", dttm), "CAST('2019-01-02' AS DATE)"
  143. )
  144. self.assertEqual(
  145. HiveEngineSpec.convert_dttm("TIMESTAMP", dttm),
  146. "CAST('2019-01-02 03:04:05.678900' AS TIMESTAMP)",
  147. )