code: private void validateTable(TableDefinition tableDef) {
          for (String optName : tableDef.getOptionNames()) {
              String optValue = tableDef.getOption(optName);
              switch (optName) {
              case CommonDefs.OPT_AGING_FIELD:
                  validateTableOptionAgingField(tableDef, optValue);
                  break;
              case CommonDefs.OPT_RETENTION_AGE:
                  validateTableOptionRetentionAge(tableDef, optValue);
                  break;
              case CommonDefs.OPT_SHARDING_FIELD:
                  validateTableOptionShardingField(tableDef, optValue);
                  break;
              case CommonDefs.OPT_SHARDING_GRANULARITY:
                  validateTableOptionShardingGranularity(tableDef, optValue);
                  break;
              case CommonDefs.OPT_SHARDING_START:
                  validateTableOptionShardingStart(tableDef, optValue);
                  break;
              case CommonDefs.OPT_AGING_CHECK_FREQ:
                  validateTableOptionAgingCheckFrequency(tableDef, optValue);
                  break;
              default:
                  Utils.require(false, "Unknown option for SpiderService table: " + optName);
              }
          }
          
          for (FieldDefinition fieldDef : tableDef.getFieldDefinitions()) {
              validateField(fieldDef);
          }
          
          if (tableDef.getOption(CommonDefs.OPT_AGING_FIELD) != null &&
              tableDef.getOption(CommonDefs.OPT_AGING_CHECK_FREQ) == null) {
              String agingCheckFreq = tableDef.getAppDef().getOption(CommonDefs.OPT_AGING_CHECK_FREQ);
              if (Utils.isEmpty(agingCheckFreq)) {
                  agingCheckFreq = "1 DAY";
              }
              tableDef.setOption(CommonDefs.OPT_AGING_CHECK_FREQ, agingCheckFreq);
          }
      }
docs: Validate the given table against SpiderService-specific constraints.