【7.0.01288.0】Mysql数据库与ES数据库使用参数报错
你好,
我需要用业务数据库与ES数据库的数据进行join,需要通过时间范围传参保证数据量可控
单独使用ES数据集或Mysq数据集功能都正常,但两个数据集join后(4种join都试过了),只要时间范围内有一个数据集没有数据,系统就会报错,而且无法保存
客户现在急需看到该报表,还请尽快帮忙排查一下
感谢
详情请查看附件视频 本帖最后由 Eden.Sun 于 2024-9-26 16:27 编辑
Pirit_Xu 发表于 2024-9-26 16:21
葡萄城:ElasticSearchDSL;
ES版本:7.10.2
好的我们在继续看一下。
您的过滤人条件是在 filter 中写的。
您在must中来指定index试试,如下:
{
"query": {
"bool": {
"must": [
{
"match": {
"_index": "javen_test"
}
}
}
}
}
看您的视频后,感觉您是通过自定义表写的sql然后利用参数添加的筛选和查询,当某个查询的结果为空的时候,此时使用join链接会报错。
可以提供一下您的数据集文件吗?我们需要更多的信息来判断如何解决这样的问题。
lucas.Yan 发表于 2024-9-19 18:24
看您的视频后,感觉您是通过自定义表写的sql然后利用参数添加的筛选和查询,当某个查询的结果为空的时候, ...
还是造一下数据吧两个数据集中字段join一下,比如Mysql中 snCode,startTime, endTime; ES中 snCode,eventTime,result; 用snCode join,使用时间过滤 早上好,我在本地自己构建了一个测试环境,使用sql和参数配合进行时间的筛选,然而并没有复现出报错的问题。如果您的数据量不是很大,可以尝试不在sql中进行过滤。转而使用数据集的数据过滤器功能。
您尝试一下上面这种方式。
补充一下后台报错信息,麻烦帮忙看看,很不稳定
2024-09-24 07:47:51.144+00:00 0HN6SD573TH2R:00000008 Grapecity.Enterprise.Reporting.Plugin.V2.Controllers.ReportsController Failed to get report parameters values. Error: An error occurred during report fail check procedure: Specified data inaccessible: Server inner error on dataset executor. Exception detail:Meta:_gcErrorCode=E_80029;
_gcErrorCategory=SqlExecutor;
GrapeCity.Data.DataSource.Common.Abstraction.Exceptions.GcException: Internal executor error. Method or code should not be reached.
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.JoinConstraintOptimizer.<ParseBooleanExpression>b__9_3(ColumnIdentity ci)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.ExecuteContext`1.ExecuteColumnExpContext.MakeFunc()
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.JoinConstraintOptimizer.ParseBooleanExpression(IExpression expression, JoinConstraintOptimizationResult result)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.JoinConstraintOptimizer.Optimize(IExpression expression)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.CompilerCore.JoinCore(TLeftTable leftTableContext, TRightTable rightTableContext, JoinType joinType, IExpression joinConstraint, Func`3 columnCombinator, Func`3 rowCombinator, Func`4 resultTableConstructor, GlobalExecuteContext globalExecuteContext)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.CompositeTable.Join(TableContext secondTable, JoinType joinType, IExpression joinConstraint, GlobalExecuteContext globalExecuteContext)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.MemorySqlExecutor.ExecuteStatementBody(SelectStatement statement, String alias, GlobalExecuteContext globalExecuteContext, Boolean ignoreOrderBy)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.MemorySqlExecutor.ExecuteStatement(SelectStatement statement, String alias, GlobalExecuteContext globalExecuteContext)
at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.MemorySqlExecutor.ExecuteImpl(SelectStatement selectStatement, GlobalExecuteContext globalExecuteContext)
at GrapeCity.Enterprise.Data.DatasetManager.GcefModelQuery.ExecuteAsync(Dictionary`2 connectionStringModel, DataSetDocument datasetDoc, Dictionary`2 runtimeParamValues, Dictionary`2 procedureParametersDic, Boolean isValidationMode, Int32 rowLimit)
at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.GCEFModelQuery(GcefQueryParameter queryArgument, Dictionary`2 nonFixedParams, Boolean isValidationMode, Boolean enableRowLimit, Int32 rowLimit)
at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.GetTableContextAsync(GcefQueryParameter queryArgument, Boolean enableRowLimit, Int32 rowLimit, Boolean isValidationMode, String customSQL)
at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.GetTableContextWithoutCalcAndCatFieldsAsync(GcefQueryParameter queryArgument, Boolean enableRowLimit, Int32 rowLimit, Boolean isValidationMode)
at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.QueryDataImplAsync(GcefQueryParameter queryArgument, Int32 rowLimit, Boolean indexMode, Boolean isValidationMode, String customSQL)
at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.QueryDataAsync(GcefQueryParameter parameter, Nullable`1 rowLimit, Boolean isValidationMode, String customSQL)
at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.QueryDataWithViewAsync(GcefQueryParameter parameter, IViewInfo view, Nullable`1 rowLimit, String customSQL)
at GrapeCity.Enterprise.Server.Dataset.DatasetController.GetNormalDatasetStreamDataResultAsync(DataSetDocument datasetDoc, Dictionary`2 datasourceDocDict, Dictionary`2 runtimeParameters, List`1 requiredParameters, IDatasetManager datasetManager, Int32 previewRows, ILogger`1 logger, IDatasetViewCalculator datasetViewCalculator)
at GrapeCity.Enterprise.Server.Dataset.DatasetController.QueryDatasetData(DataSet model, IExecuteSession executeSession, IDatasetManager datasetManager, IStreamingDatasetService streamingDatasetService, IDatabaseOperationService databaseOperationService, IPushDatasetDatabaseAdapter pushDatasetDatabaseAdapter, INativeQueryDatasetService nativeQueryDatasetService, IDatasetViewCalculator datasetViewCalculator, ILogger`1 logger, ILoggerFactory loggerFactory).
2024-09-24 07:47:51.145+00:00 0HN6SD573TH2R:00000008 Serilog.AspNetCore.RequestLoggingMiddleware Request finished HTTP/1.1 POST /api/v2.0/reporting/reports/077a9cea-13e8-4039-91b1-2e179f68986c/render-parameters-values - 400 application/json; charset=utf-8 364.1526 ms
2024-09-24 07:47:58.382+00:00 Grapecity.Enterprise.Scheduler.Schedule.Actors.ProxyDispatchActor task<51702419-cd32-449f-bc07-30e448b70c1e> get a available worker: 从您的日志和您这里的日志内容来看,是缺少字段:
或者是没有拿到参数值:
应该是您的数据集里面的表中的数据或者字段导致的。有可能是没有数据,有可能是直接字段都找不到了。
您可以对比一下出错和正常运行时两个子表各自的数据内容,排查一下这方面的问题。
添加参数过滤方式如图
报错见视频附件,观察到ES只要没有数据就会报错,导致该报表没法提交给到客户
您好,这个报错还是找不到指定列。
我们这边也做了测试,在查询为空的情况下,得到的结果如下:
所以我们怀疑的是您的自定义table,也就是您左边的这个table,是写的自定义的sql。
是不是这个sql里面,在查询日期不同的时候,返回的列不一样。
最简单的就是您拿报错的时间,在一个数据库连接工具里面,查一下这个ES数据库,看一下他返回的数据表,是长什么样子的,有没有这个列
你好,目前分析下来,仅通过query语句中的term方式进行index匹配,在无数据的时候会出现全局检索导致字段错乱,无法满足使用,还请尽快提供index指定的功能增强对ES的支持
页:
[1]
2